gpt4 book ai didi

mysql - 同一张表在 2 个条件下内联一个表,有时任一条件都为假

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:10 26 4
gpt4 key购买 nike

enter image description here

详细信息:

  1. VC 是表格

  2. 我希望 C 在 2 个条件下加入 V(两个 C 分别命名为 C0C1).由于我必须在同一查询中分别按 CC 的子表的列过滤 V,因此我认为需要加入。

  3. V 有很多,至少有一个 C,而 Cx 有时都不存在。

因为 3.,对 C0C1 使用 inner join 有时会导致空结果,但我不想得到 V'白色区域。

架构:

V (id)
C (id, v_id, name, type)

查询(1):

SELECT V.* 
FROM V
INNER JOIN C AS C0 ON V.id = C0.v_id WHERE C0.type = 0
INNER JOIN C AS C1 ON V.id = C1.v_id WHERE C1.type = 1
WHERE C0.name = 'word' or C1.name = 'word'
WHERE C0.name like '%wo%'

查询(2):

SELECT V.* 
FROM V
INNER JOIN C AS C0 ON V.id = C0.v_id WHERE C0.type = 0
INNER JOIN C AS C1 ON V.id = C1.v_id WHERE C1.type = 1
WHERE C0.name = 'word' or C1.name = 'word'
WHERE C1.name like '%wo%'

WHERE C0.name = 'word' or C1.name = 'word':这个子句每次都存在。

WHERE Cx.name like '%wo%':这个子句取决于时间。

最佳答案

嗯...您似乎正在寻找具有相关子查询的 EXISTS 条件:

SELECT * FROM v 
WHERE EXISTS (SELECT 1 FROM c WHERE c.c0 = v.c0 OR c.c1 = v.c1)

这将返回表 v 中的所有记录,表 c 中至少有一条记录满足任一条件 c.c0 = v.c0 或条件 c.c1 = v.c1

在这种情况下,相关子查询相对于 JOIN 方法的优势在于,当表 c 中存在多个匹配项时,它可以避免记录相乘。

如果您想排除满足任一条件的记录而不是包括它们,则只需将 WHERE EXISTS 更改为 WHERE NOT EXISTS

关于mysql - 同一张表在 2 个条件下内联一个表,有时任一条件都为假,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54965458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com