MySQL-有没有一种方法可以对两个表使用WHERE?

时间:2020-05-15 08:15:57

标签: mysql

我正在尝试从MySQL表中获取以下数据:

SELECT pupils.NAME, pupils.ID, teachers.name, teachers.id 
FROM pupils, teachers 
WHERE teachers.JITSI=0 
AND pupils.JITSI=0

但是当我尝试执行它时,它只是给了我一个空集。我想从JITSI列为1(JITSI是布尔值)的两个表中获得每个条目。我必须使用某种JOIN吗?

SELECT * FROM teachers给出以下结果:

+----------------+--------+-------+
| NAME           | ID     | JITSI |
+----------------+--------+-------+
| Max Mustermann | root12 |     0 |
+----------------+--------+-------+
1 row in set (0.001 sec)

SELECT * FROM pupils给出以下结果:

+----------------------------+--------+-------+
| NAME                       | ID     | JITSI |
+----------------------------+--------+-------+
| Annegret Kramp-Karrenbauer | etcbla |     1 |
| Anne Bauer                 | atcbla |     0 |
+----------------------------+--------+-------+
2 rows in set (0.001 sec)

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用UNION ALL解决此问题:

SELECT 'pupil' AS `type`, pupils.NAME, pupils.ID
FROM pupils
WHERE pupils.JITSI = 0
UNION ALL
SELECT 'teacher', teachers.name, teachers.id 
FROM teachers 
WHERE teachers.JITSI = 0

...或使用子选择

SELECT `type`, NAME, ID
FROM (
  SELECT 'pupil' AS `type`, pupils.NAME, pupils.ID, pupils.JITSI
  FROM pupils
  UNION ALL
  SELECT 'teacher', teachers.name, teachers.id, teachers.JITSI
  FROM teachers
) t WHERE t.JITSI = 0 

...或使用WITH(自MySQL 8.0起):

WITH PupilsTeachers (`TYPE`, `NAME`, `ID`, `JITSI`) AS
(
  SELECT 'pupil' AS `TYPE`, pupils.NAME, pupils.ID, pupils.JITSI
  FROM pupils
  UNION ALL
  SELECT 'teacher', teachers.name, teachers.id, teachers.JITSI
  FROM teachers
)
SELECT `TYPE`, `NAME`, `ID` 
FROM PupilsTeachers
WHERE `JITSI` = 0;

demo on dbfiddle.uk