如何解决带有左联接并在where子句中组合AND和OR的mysql查询 table1: table2:
我有两个表,table1
和table2
,分别是LEFT JOIN
。在两个表上都应该有一个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
我需要一个查询,在这里我想要所有活动人员(status=1
)的所有ID,其中要有一封电子邮件(都在table1
中),该人员的姓名(类型1)必须以M AND
的邮政编码(类型2)必须以1 AND
开头,它们的类型3是x OR
类型5是x(均在table2
中)。 / p>
如果没有EITHER type = 3 OR type = 5
条目,则不应返回ID。
如果type = 3
或type = 5
不应返回id,但两个值都不为x
在我的示例中:
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'))
任何帮助将不胜感激!
谢谢RiggsFolly
有了不错的帮助之后,它就会(并且可以正常工作)
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')
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。