mysql - 在 where 子句中使用左连接和 AND 和 OR 组合的 mysql 查询
问题描述
我有两张桌子,table1
谁table2
是LEFT JOIN
ed。两个表上都应该有一个包含AND
和OR
条件的查询。最好在一个查询中。我知道我可以做几个查询并与 id 数组相交(使用 PHP)但是......
table1
:
id email status
1 a@one 1
2 1
3 b@two 1
4 c@three 0
5 d@four 1
6 e@five 1
table2
:
ix t_id type value
1 1 1 Miller
2 1 2 10001
3 1 3 x
4 1 5 y
5 2 1 Miller
6 2 2 20002
7 2 3 x
8 3 1 Muller
9 3 2 10002
10 3 5 x
11 4 1 Mayer
12 4 2 10002
13 4 3 x
14 5 1 Moore
15 5 2 10234
16 6 1 Zlo
17 6 2 12345
18 6 3 x
19 6 5 x
我需要一个查询,我想要所有活跃人员的 id ( status=1
),其中有一封电子邮件 (all in table1
),人名 (类型 1) 必须以 M 开头,邮政编码 (类型 2) 必须以他们拥有AND
的 1 开头AND
类型 3 是 xOR
类型 5 是 x (all in table2
)。
EITHER type = 3 OR type = 5
如果没有条目,则不应返回 id 。
type = 3
如果不返回type = 5
任何值,则不应返回 idx
在我的例子中:
t_id 4 (Mayer) 不活跃,所以他不应该出现在结果中 t_id 2 (Miller) 没有电子邮件,所以他不应该出现在结果中 t_id 5 (Moore) 没有类型 3,也没有类型 5,所以他不应该出现在结果中 t_id 6 (Zlo) 名字不以 M 开头,所以他不应该出现在结果中
我设法写了这样的东西,但它在所有零行中都不起作用:
SELECT id
FROM table2
LEFT JOIN table1 ON (t_id = id WHERE email LIKE '%@%' AND status = '1')
WHERE (type = 1 and value LIKE 'M%')
AND (type = 2 AND value LIKE '1%')
AND ((type = 3 AND value = 'x') OR (type = 5 and value = 'x'))
任何帮助,将不胜感激!
谢谢你里格斯愚蠢
在很好的帮助之后它会(并且有效)
SELECT id
FROM table2
LEFT JOIN table1 ON table2.userid = table1.id
AND status = 1 AND email LIKE '%@%'
WHERE (
(type = 3 AND value = 'X')
OR (type = 5 AND value = 'X')
)
table2
无法集成的附加条件将是单独的查询:
SELECT id
FROM table2
LEFT JOIN table1 ON table2.userid = table1.id
AND status = 1 AND email LIKE '%@%' WHERE (type = 1 AND value LIKE 'G%')
和
SELECT id
FROM table2
LEFT JOIN table1 ON table2.userid = table1.id
AND status = 1 AND email LIKE '%@%' WHERE (type = 2 AND value LIKE '1%')
解决方案
具体类型不能是 1 和 2 和 3,但可以是 1 或 2 或 3
SELECT id
FROM table2 t2
LEFT JOIN table1 t1 ON t2.t_id = t1.id AND status = '1'
WHERE t1.email LIKE '%@%'
AND (
(t2.type = 1 and t2.value LIKE 'M%')
OR (t2.type = 2 AND t2.value LIKE '1%')
OR (t2.type = IN(3,5) AND t2.value = 'x')
)
推荐阅读
- ecmascript-6 - 转译 node-fetch 要求返回错误
- javascript - 如何使用 for 循环或数组填充 angularjs 列表?
- phaser-framework - 我怎样才能只放一次炸弹,直到它在物理街机池中爆炸?
- sql - SQL 左连接日期过滤器
- microsoft-graph-api - 用于多个用户的 Graph API Calendar getSchedule
- python-3.x - 重新安装python CentOS8,错误:找不到平台独立库
- c# - 如何将项目添加到 DataGridView 并在输入后自动对其进行排序?
- facebook - Facebook 开发者账户变更
- hammerspoon - 在 Hammerspoon 中,如何打开应用程序并传入启动参数
- javascript - 在 TypeScript 中声明递归方法链