Как я могу выбрать все строки в таблице и перепроверить ее с другой таблицей? - PullRequest
2 голосов
/ 21 ноября 2011

MySQL Tables

MySQL: растения

+----+--------+
| id | plant  |
+----+--------+
| 1  | tree   |
+----+--------+
| 2  | flower |
+----+--------+
| 3  | tree   |
+----+--------+

MySQL: деревья

+----+------+
| id | type |
+----+------+
| 1  | hard |
+----+------+
| 3  | soft |
+----+------+

Что я пытаюсь сделать

Я хочу выбрать все строки в таблице заводы .

Но если plant = tree, то тип в таблице деревья должен быть hard, чтобы его можно было отобразить.

Итак, приведенный выше пример должен вывести: 1=tree и 2=flower.

3=tree следует исключить, поскольку его type = soft.

То, что я до сих пор пробовал ... но не сработало

а) Я думаю, я не могу использовать union, потому что столбцы разные.

b) Я уже попробовал left join, но это тоже не сработало:

select p.id, p.plant
from plants AS p
left join
(
   select `id`, `type`
   from `trees`
) AS t ON p.id = t.id
WHERE t.type = 'hard'

есть идеи, как мне это сделать?

Ответы [ 3 ]

1 голос
/ 21 ноября 2011

да

select p.id, p.plant from plants as p left join trees as t on (p.id = t.id) where t.type = 'hard' or t.type is null

Я надеюсь, что это работает. В любом случае проблема с вашим текущим запросом не в левом соединении (это нормально на самом деле), но в том, что вы указываете тип дерева, должно быть сложно, поэтому вы удаляете строки с нулевым деревом, которое дало вам левое соединение.

0 голосов
/ 21 ноября 2011
SELECT p.id, p.plant
FROM plants AS p
LEFT JOIN trees AS t ON p.id = t.id
WHERE t.type = 'hard'
   OR t.type IS NULL
0 голосов
/ 21 ноября 2011

Работает ли это для вас:

select p.id, p.plant, t.id as tree_id, t.type from plants p left join trees t ON (p.id = t.id) WHERE t.type = 'hard'

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