join,带有不需要联接表中关联行的标志

whitzsjs  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(253)

我有 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 ,否则中有1行或多行 table2 同样的 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\u 1为1的行,然后检索open\u 1为1的行) table1.t1_id = table2.t1_id ),但我想在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,所以我要检索该行,并且 open_1 对于第2-5行为0,因此我只希望在中有匹配行时检索这些结果 table2row_1 = 1.
所以我想检索3个结果:

row_1    row_2
5        3
4        7
6        2

我的问题是无法检索第一行(其中open_=1),因为第二个表中没有相应的行。所以我想要一种方法来添加这一行,如果open_1=1,不管连接是什么

jtjikinw

jtjikinw1#

可以使用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
whlutmcx

whlutmcx2#

使用左连接

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
13z8s7eq

13z8s7eq3#

你需要一个左连接

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

相关问题