[英]mysql query with left join and a combination of AND and OR in the where clause
我有两个表, table1
和table2
是LEFT JOIN
编辑的。 两个表上都应该有一个结合了AND
和OR
条件的查询。 最好在一个查询中。 我知道我可以做几个查询并与 id 的 arrays 相交(使用 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
),其中有一个 email (都在table1
中),人名(类型 1)必须以 M 开头AND
邮政编码(类型 2)必须以 1 开头, AND
它们的类型 3 是 x OR
类型 5 是 x(都在table2
中)。
如果没有EITHER type = 3 OR type = 5
条目,则不应返回 id。
如果type = 3
或type = 5
但两个值都不是x
,则不应返回 id
在我的例子中:
t_id 4 (Mayer) ist not active, so he should not be in the result t_id 2 (Miller) has no email, so he should not be in the result t_id 5 (Moore) does not have type 3 and does not have type 5 so he should not be in the result t_id 6 (Zlo) the name does not begin with M so he should not be in the result
我设法写了这样的东西,但它在所有零行中都不起作用:
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')
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.