كيف يمكنني إرسال SQL حدد بيان لتشمل بحث من جدول آخر؟

StackOverflow https://stackoverflow.com/questions/817283

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا نسخ البيانات من قاعدة بيانات واحدة إلى أخرى، وتلفيق البيانات بينما أنا في ذلك. قواعد البيانات لديهما الجداول دعا عملاء وظائف.

ولكن، في قاعدة البيانات لا يكون "ألفا" الجدول ظائف علاقة إلى طاولة العملاء، حيث قاعدة بيانات "ابسيلون" لا. جدول وظائف ألفا لديه مجرد اسم العملاء في عمود NVARCHAR.

وأنا في حاجة الى بيان حدد لبحث ID العميل في جدول العملاء بالاسم، بينما أنا إدراجه في جدول وظائف في ابسيلون.

وبياني SQL التي لم تنته يبدو مثل هذا:

insert into Epsilon.dbo.Jobs (ClientId, Name, Location, DateCreated)
    select ????, Name, Location, DateCreated from Alpha.dbo.Jobs

وكيف يمكنني تعديل هذا بحيث ؟؟؟؟ يحتوي على ClientId من الجدول العملاء في ابسيلون؟ وأنا أعلم أنني بحاجة لبحث البيانات باستخدام عمود الاسم في وظائف، ولكن أنا لا يمكن معرفة بناء الجملة من أجل هذا.

هل كانت مفيدة؟

المحلول

insert into Epsilon.dbo.Jobs (ClientId, Name, Location, DateCreated)
    select c.ClientID, a.Name, a.Location, a.DateCreated from Alpha.dbo.Jobs a
    join Epsilon.dbo.Client c on c.Name = a.ClientName

وهذا هو الانضمام إلى متفائل جدا، ولكن حتى لو كان يحتاج إلى تعديل هذا يجب أن تعطيك فكرة عامة.

نصائح أخرى

ما عليك هو الانضمام. ينضم، على عكس ما يعتقد الى حد كبير الجميع عند البدء، لا تتطلب العلاقات المعرفة في مخطط قاعدة البيانات. فهي تتطلب فقط أن العمودين كنت مقارنة لها نفس النوع (<م> تحرير انظر التعليقات).

والسؤال هو الذي الانضمام تريد. بسبب عدم وجود علاقة محددة، قد يكون هناك عملاء الذين لديهم وظائف وعملاء التي لم تفعل ذلك، والوظائف التي لديها عملاء والوظائف التي لا.

وأفترض أن كنت تريد جميع الوظائف الموجودة، وحيث يطابق ClientId الجدول العملاء تحقيق في ClientId، وحيث لا وجود تلك العلاقة لمغادرة لاغية ClientId. يمكننا أن نفعل هذا مع LEFT JOIN. وظائف JOIN LEFT سوف تجلب عملاء في كافة السجلات على LEFT، حتى عندما تكون العلاقة محددة مع العملاء على الحق غير موجود. نحن يمكن عكس اثنين والقيام RIGHT JOIN، ولكن هذا لا يفعله الناس في العادة. سأترك لكم لتقرأ على أنواع أخرى من الصلات وكيفية عملها.

وهكذا حدد بيانكم ستبدو:

select ClientId, Name, Location, DateCreated 
from Alpha.dbo.Jobs as J LEFT JOIN 
    Alpha.dbo.Clients as C ON j.ClientName = c.ClientName

إذا Jobs.ClientName ليس نفس نوع البيانات كما c.ClientName، يمكنك تعديل المخطط قبل تشغيل الاستعلام لجعلها تتماشى مع بعضها البعض.

<اقتباس فقرة>   

وإدراجها في Epsilon.dbo.Jobs   (ClientId، اسم، الموقع،   تاريخ الإنشاء)       حدد c.ClientId، اسم، الموقع، DateCreated من Alpha.dbo.Jobs كما ي   انضمام الداخلية Epsilon.dbo.Clients كما ج في   (j.ClientId = c.ClientId)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top