SQL DISTINCT INNER JOIN и LEFT JOIN и .NET C # PrimaryKey - PullRequest
2 голосов
/ 07 февраля 2012

У меня есть 3 таблицы A, B и C. Я хочу получить subId и текст для каждого идентификатора. Я также хочу знать, если ID имеет какой-либо eId связанный с ним.

Я использовал INNER JOIN для A и B, а затем LEFT JOIN'd для этого результата с таблицей C. Моя строка SQL до сих пор:

SELECT DISTINCT A.id,A.subId, B.text, C.eId
FROM A
INNER JOIN B ON A.id=B.id
LEFT JOIN C ON A.id=C.id
WHERE B.text='something'

Проблема в том, что C.eId имеет несколько записей для каждого идентификатора. Итак, я получаю вывод, как это:

=================================
  id  |  subId  |  text  |  eId  
  1        e12     etc       
  2        e12     etc       
  2        t23     etc     p1111
  3        e12     etc       
  4        e12     etc     p1234
  4        e12     etc     p4325

Я хочу удалить строки, подобные последней («4 e12 и т. Д. P4325»), потому что я уже знаю, что 4, e12 имеет какой-то другой eId, связанный с ним. Мне нужны id и subId, чтобы быть PrimaryKeys.

Как мне это сделать? DISTINCT работал, пока я не добавил несколько идентификаторов в eId.

Редактировать : Я использую MSSQL, если это имеет значение.

1 Ответ

1 голос
/ 07 февраля 2012

Не помню, работает ли он таким образом, попробуйте и скажите:

SELECT DISTINCT A.id,A.subId, B.text,
(select top 1 C.eId from C where C.id = A.id) AS eId
FROM A
INNER JOIN B ON A.id=B.id
WHERE B.text='etc'
...