Mysql можно ли сделать следующее? - PullRequest
1 голос
/ 12 февраля 2010

У меня есть запрос MySQL, который делает следующее,

SELECT * FROM categoryTable 
LEFT JOIN userMenuTable 
ON userMenuTable.categoryId = categoryTable.categoryId

возвращает только те результаты, которые соответствуют этому условию

ON userMenuTable.categoryId = categoryTable.categoryId

Я надеялся, что удастся получить все результаты, а также результаты из JOIN?

Ответы [ 3 ]

3 голосов
/ 12 февраля 2010

Я думаю, что вам нужно FULL JOIN (у mysql такого синтаксиса нет, но вы можете достичь желаемого результата с помощью UNION + LEFT + RIGHT JOIN)

SELECT * FROM categoryTable 
LEFT JOIN userMenuTable 
ON userMenuTable.categoryId = categoryTable.categoryId
UNION
SELECT * FROM categoryTable 
RIGHT JOIN userMenuTable 
ON userMenuTable.categoryId = categoryTable.categoryId
0 голосов
/ 12 февраля 2010

Я думаю, что, возможно, вы ищете полное внешнее соединение. MySQL не поддерживает FULL OUTER JOIN, но вы можете получить эквивалент, используя LEFT и RIGHT JOINS:

SELECT * FROM categoryTable LEFT JOIN userMenuTable
  ON categoryTable.categoryId = userMenuTable.categoryId
UNION ALL 
SELECT * FROM categoryTable RIGHT JOIN userMenuTable
  ON categoryTable.categoryId = userMenuTable.categoryId
WHERE categoryTable.categoryId IS NULL; 

Делись и наслаждайся.

0 голосов
/ 12 февраля 2010

Результат левого внешнего соединения, как в вашем примере, будет содержать все записи "left" categoryTable, даже если условие соединения не находит ни одной подходящей записи в "right" userMenuTable.

С другой стороны, правое внешнее соединение напоминает левое внешнее соединение, за исключением случаев обращения таблиц в обратном порядке. Каждая строка из «правильного» * ​​1005 * появится в наборе результатов хотя бы один раз.

Как a1ex07 предлагает в другом ответе , может показаться, что вам нужно полное внешнее соединение , которое в MySQL можно эмулировать с UNION между LEFT JOIN и RIGHT JOIN.

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