我有table1
,其中包含以下列:
t1_id
(主键,自动递增)row_1
row_2
open_1
可以为0或1。我有table2
,其中包含以下列:
t1_id
(table1.t1_id
的外键)row_1
可以为0或1 生成表时,如果没有为table2
生成任何列,则table1.open_1
= 1。
因此,如果open_1为1,则t1_id
中将没有行具有相同的table2
键,否则table2
中将有1个或更多行具有相同的t1_id
我想在其中{strong>其他为真的情况下检索table1.row_1, table1.row_2
:
open_1
是1,或table2.row_1
是1 我已经尝试过了:
SELECT table1.row_1, table1.row_2
FROM table1
JOIN table2
ON table1.t1_id = table2.t1_id
WHERE table1.open_1 = 1
OR table2.row_1 = 1
但是它不会返回open_1
为1的结果。
我认为这是因为当open_1
= 1时,table2
中没有关联的行,因此JOIN子句不检索任何行。
如果我执行2个查询,我可以轻松做到(首先检索open_1为1的行,然后检索table1.t1_id
= table2.t1_id
的行),但我想用1查询。
我可以使用1个查询吗?
数据:
表1:
t1_id row_1 row_2 open_1
1 5 3 1 <---- open_1 = 1, so retrieve this
2 4 7 0
3 6 2 0
4 8 1 0
5 9 7 0
表2:
t1_id row_1 row_2 row_3
2 0 3 4
2 1 2 5 <--- row_1 is 1
2 1 4 2
3 0 3 4
3 1 2 5 <--- row_1 is 1
4 0 4 2
5 0 3 4
因此在table1
中,第一行的open_1
为1,所以我要检索该行,而对于第2-5行的open_1
为0,所以我要检索仅当table2
中的匹配行的row_1
= 1时,这些结果才会出现。
所以我想检索3个结果:
row_1 row_2
5 3
4 7
6 2
我的问题是我无法检索第一行(其中open_1 = 1),因为第二个表中没有相应的行。因此,我希望有一种方法可以在open_1 = 1时添加此行,而不考虑JOIN
答案 0 :(得分:2)
您可以使用 union 子句:
select table1.row_1, table1.row_2
FROM table1 where table1.open_1 = 1
UNION
SELECT table1.row_1, table1.row_2
FROM table1
JOIN table2
ON table1.t1_id = table2.t1_id
WHERE table2.row_1 = 1
答案 1 :(得分:0)
使用左联接
Select distinct t1.row_1,t1.row_2 from table1 t1
left join table2 t2 on
t1.t1_id=t2.t1_id where t1.open_1=1 or t2.row_1=1
答案 2 :(得分:0)
您需要一个LEFT JOIN
SELECT table1.row_1, table1.row_2
FROM table1
LEFT JOIN table2
ON table1.t1_id = table2.t1_id
WHERE table1.open_1 = 1
OR table2.row_1 = 1