SQL-запрос для объединения таблицы с несколькими совпадающими строками - PullRequest
1 голос
/ 11 октября 2011

РЕДАКТИРОВАТЬ: мое первоначальное описание не было очень четким, поэтому позвольте мне начать сначала:

У меня есть одна таблица x, которая имеет столбцы a, b и c, и я хочу запросить содержимое из таблицы y, где ya = xa И в таблице x есть строка, где xb = (arg1) И xc = (arg2) И еще одна строка существует в x, где xb = (arg3) и xc = (arg4)

Таким образом, передача значений (3, 4, 6, 12) туда вернула бы a1 в этом тестовом примере. Надеюсь, что все проясняется.

|-------|----------|----------|
|   a   |     b    |     c    |
|-------|----------|----------|
|   1   |     3    |     4    |
|   1   |     6    |     12   |
|   2   |     6    |     33   |

Ответы [ 3 ]

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

Это звучит как базовое соединение 1-ко-многим (1: M) между родителем -> дочерней таблицей. Если это так, базовое INNER JOIN вернет все совпадающие строки между родительской и дочерней таблицами. Родительские столбцы (если они включены в предложение SELECT) будут повторяться для каждой соответствующей строки в дочерней таблице.

ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ между родителем и потомком вернет все строки из родительского и совпадающие строки из дочернего. Если значение ID отсутствует в дочерней таблице, вместо любых данных обычно возвращается значение NULL.

Надеюсь, это поможет.

1 голос
/ 11 октября 2011
Select *
  from y
 where exists( select *
                 from x
                where y.a = x.a
                  and x.b = 3
                  and x.c = 4 )
   and exists( select *
                 from x
                where y.a = x.a
                  and x.b = 6
                  and x.c = 12 )
0 голосов
/ 11 октября 2011

Left Join ...?

То, что вы спрашиваете, кажется очень простым - можете ли вы предоставить некоторые детали (схемы таблиц и т. Д.), Чтобы мы могли быть более полезными?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...