我有table1,它有以下列:
t1_id (主键,auto_increment)row_1row_2open_1可以是0或1。我有table2,它有以下列:
t1_id (table1.t1_id的外键)row_1可以是0或1生成表时,如果没有为table2生成列,则table1.open_1 = 1。
因此,如果open_1为1,则table2中没有具有相同t1_id键的行,否则table2中有1行或多行具有相同的t1_id。
我想检索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子句不检索任何行。
如果我执行两个查询,我可以很容易地完成它(首先检索open_1为1的行,然后检索table1.t1_id =table2.t1_id的行),但我想在1个查询中完成。
我可以用一个查询来完成这个任务吗?
数据:
table1:
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 0table2:
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的情况下,我才想检索这些结果。
因此,我想检索三个结果:
row_1 row_2
5 3
4 7
6 2我的问题是我无法检索第一行(其中open_1 = 1),因为第二个表中没有对应的行。因此,我希望有一种方法来添加该行,如果open_1 = 1,而不管联接是什么
发布于 2018-08-29 04:39:45
您可以使用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发布于 2018-08-29 04:39:06
使用左联接
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发布于 2018-08-29 04:42:02
你需要一个左联接
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 = 1https://stackoverflow.com/questions/52069387
复制相似问题