繁体   English   中英

mysql 在 where 子句中使用左连接和 AND 和 OR 组合的查询

[英]mysql query with left join and a combination of AND and OR in the where clause

我有两个表, table1table2LEFT JOIN编辑的。 两个表上都应该有一个结合了ANDOR条件的查询。 最好在一个查询中。 我知道我可以做几个查询并与 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 = 3type = 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM