T-SQL Выбрать все из таблицы A и условие для таблицы B - PullRequest
1 голос
/ 05 октября 2011
TableA Columns: A_ID, NAME, SOURCE, TITLE, EVENTID
TableB Columns: B_ID, EVENTID, CODE, FIELD

Как мне извлечь NAME, SOURCE, TITLE и FIELD или NULL (если есть CODE = x)?Пример должен показать это лучше.Это T-SQL для SQL Server Express.

Пример:

TableA                                 |   TableB
-----------------------------------------------------------------------
A_ID, NAME, SOURCE, TITLE, EVENTID     |   B_ID, EVENTID, CODE, FIELD
-----------------------------------------------------------------------
1     john  s1      x      100         |   1     100      5     textA  
2     bruce s2      y      105         |   2     100      10    textB
3     bob   s3      z      110         |   3     105      5     textC
                                       |   4     110      5     textD
                                       |   5     110      10    textE

Для EventId 105 нет кода 10, поэтому результат должен быть нулевым.Как написать SELECT-квест, который бы дал мне такой результат:

[ john  | s1 | x | textB ]
[ bruce | s2 | y |       ]
[ bob   | s3 | z | textE ]

Это может быть действительно легко, но я не могу понять это .. Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 05 октября 2011

Вам нужно OUTER JOIN между таблицами

SELECT A.NAME,
       A.SOURCE,
       A.TITLE,
       B.FIELD
FROM   TableA A
       LEFT JOIN TableB B
         ON A.EVENTID = B.EVENTID
            AND B.CODE = 10  

Условие B.CODE = 10 должно входить в предложение JOIN, а не WHERE, чтобы избежать эффективного превращения запроса обратно в INNER JOIN.

Это может вернуть несколько строк для определенного значения A, если имеется более одной присоединяющейся записи, но из вашего вопроса не ясно, возможно ли это в ваших данных (и если да, то какиеB.Field значение следует использовать), и это вполне может быть вашим желаемым поведением.

2 голосов
/ 05 октября 2011

Это должно сделать это

SELECT a.NAME, a.SOURCE, a.TITLE, b.FIELD 
  FROM TableA a
       LEFT JOIN TableB b ON b.EventId = a.EventId
             AND b.Code = 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...