2013-12-05 8 views
0

Привет, мой SQL немного ржавый, и вам нужна небольшая помощь в правильном утверждении. У меня есть следующие настройки таблицы A и B:Соедините две таблицы на основе двух столбцов

A  B 
===== ====== 
    A  A B 
    B  C B 
      A C 
      B D 
      D A 

Я хотел бы присоединиться к одной колонки на А с обеих колонок на В, чтобы в конечном итоге с таблицей C:

C 
===== 
    A 
    A 
    B 
    B 
    B 
    A 

Я пробовал разные присоединяется, но когда я использую оператор OR, я получаю много строк. Моя установка немного более продвинутая, я надеюсь, что упрощенные таблицы выше достаточно, чтобы проиллюстрировать мою проблему. Моя настройка немного выше в приведенном выше примере. В моем приложении реального мира у меня есть две таблицы, где мне нужно найти все несколько телефонных номеров, которые могут быть в двух столбцах: PHONE1 и PHONE3. Сначала я делаю перекресток, чтобы получить все номера телефонов, которые представлены более одного раза. Моя проблема в том, что мне нужно закончить утверждение, возвращающее все мультиплеты и некоторые дополнительные данные из других столбцов. Вот мое заявление:

SELECT * FROM 
(SELECT COMPANY, CONTACT, PHONE1, PHONE3, U_EMAIL, UMEDLEM, UKONKAT, UAAFMELD 
FROM CONTACT1 JOIN CONTACT2 on CONTACT1.ACCOUNTNO = CONTACT2.ACCOUNTNO) as t1 
INNER JOIN 
(SELECT PHONE1 as PHONE FROM CONTACT1 WHERE LEN(PHONE1) > 0 
INTERSECT 
SELECT PHONE3 FROM CONTACT1 WHERE LEN(PHONE1) > 0) as t2 ON t1.PHONE1 = t2.PHONE 
+0

Что вы на самом деле хотите? Будь конкретным с структурой таблицы и вашим существующим запросом –

+0

, с какими двумя коллегами вы хотите присоединиться, не могли бы вы быть более ясными – ismail

+0

Жаль, что я попытался быть более ясным сейчас. Я надеялся попросить более общий, чтобы другим было легче, кроме моей конкретной проблемы, получить помощь. Моя ошибка – DNRN

ответ

0

это, как вы могли бы присоединиться к колонке а на обеих колонках В.

SELECT * FROM A 
INNER JOIN B B1 ON A.Column1 = B1.Column1 
INNER JOIN B B2 ON A.Column1 = B2.Column2 

Или вы можете использовать UNION, чтобы объединить два запроса результаты

SELECT * FROM A 
INNER JOIN B ON A.Column1 = B.Column1 
UNION 
SELECT * FROM A 
INNER JOIN B ON A.Column1 = B.Column2 

вы также можете рассмотреть объединение LEFT, в зависимости от того, как вы хотите обрабатывать значения NULL в B.

+0

Почти правильно, я просто получаю два столбца в C, из-за двух объединений. Но это можно зафиксировать во внешнем выражении SELECT. – DNRN

Смежные вопросы