我有两张桌子,table1谁table2是LEFT JOINed。两个表上都应该有一个包含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%')