Как вернуть строку (желательно в ANSI SQL), когда объединенная таблица имеет ВСЕ соответствующие строки на моем on
?Как вернуть строку, в которой все соединения существуют? SQL
Пример неправильного поведения:
SELECT table1.*
, whatever
FROM table1
INNER JOIN table2 ON table2.whateverrelation = table1.whateverrelation
AND table2.matching IN(1, 2);
будет возвращать каждый table1
строку с согласующим соотношением на table2
, который равен 1 или 2 (т.е. возвращает table1
строку с одним или несколькими matching
полями
Как я могу получить что-то, что возвращает только строки table1
, которые связаны с строками table2
и чьи matching
являются ОБА 1 и 2 (поэтому AND, а не OR, поэтому должно быть не менее одного table2
с matching
= 1 и по крайней мере один с matching
= 2, поэтому он не будет показывать строку table1
без обоих совпадений)?
Я бы предпочел не делать два подключения к одному и тому же столу, я знаю, что я мог бы просто добавить левое соединение дважды, один для соответствия 1 и один, чтобы соответствовать 2, но я не знаю заранее, сколько совпадений Мне нужно.
Приветствия
я приспособился, что быть: 'HAVING SUM ((table2.matching = 1) :: Int)> 0 ', как Postgres была проблема суммирующий булевы , Это все еще запутанно, но, возможно, это лучшее, что я могу получить. Если есть способ объединить эти два, это будет идеально. –
@DanDart Да, 'SUM (...> 0)' будет работать с MySQL (вопросительный тег). Если вы используете PostgreSQL, тогда используйте 'CASE', как вы предложили. – lad2025
Да, я пытаюсь заставить его работать SQL-агностически. –