MySQL join two tables based on a condition(MySQL基于条件连接两个表)
本文介绍了MySQL基于条件连接两个表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有两张表。
用户
| id | name |
| ---|-------|
| 1 | Jhon |
| 2 | David |
刷卡
| id | swp_from | swp_to| first_swp| second_swp |
| ---|----------|-------|----------|------------|
| 1 | 1 | 2 | like | pending |
| 2 | 1 | 2 | like | pending |
我需要根据条件将这些连接到swp_from
和swp_to
中的表。
我的查询如下:
SELECT name, swp_to, first_swp FROM swipes
LEFT JOIN users ON users.id = swipes.swp_to // JOINING WITH swp_to TO MATCH FIRST WHERE CONDITION
WHERE
(swipes.swp_from = :me AND ((swipes.first_swp NOT IN ('like', 'superlike')) OR (swipes.first_swp IN ('like', 'superlike') AND swipes.second_swp NOT IN ('like', 'superlike')))) // FIRST CONDITION
OR
(swipes.swp_to = :me AND swpipes.second_swp != 'pending') // FOR THIS SECOND CONDITION I NEED TO JOIN USERS TABLE USING swp_from AS WELL IN THIS SAME QUERY
正如上面的查询中所解释的,我已经将swp_to
与users
表连接起来。但我还需要将WHERE
子句中第二个条件的swp_from
与users
表连接起来。我如何才能做到这一点?
简而言之,如果满足第一个WHERE条件,我需要使用swp_to
将查询与users
表连接。如果满足第二个WHERE条件(OR之后),那么我希望连接使用swp_from
而不是swp_to
。每行都应该发生这种情况。PHP条件逻辑解决方法也可以。
推荐答案
条件应移至ON
子句。
在MySQL中,可以使用CASE
表达式返回布尔表达式的结果(如1
或0
fortrue
或false
),如下所示:
SELECT u.name, s.swp_to, s.first_swp
FROM swipes s LEFT JOIN users u
ON CASE (s.swp_from = :me AND ((s.first_swp NOT IN ('like', 'superlike')) OR (s.first_swp IN ('like', 'superlike') AND s.second_swp NOT IN ('like', 'superlike'))))
WHEN 1 THEN u.id = s.swp_to
WHEN 0 THEN u.id = s.swp_from AND (s.swp_to = :me AND s.second_swp <> 'pending')
END;
这篇关于MySQL基于条件连接两个表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:MySQL基于条件连接两个表


基础教程推荐
猜你喜欢
- 如何在 CakePHP 3 中实现 INSERT ON DUPLICATE KEY UPDATE aka upsert? 2021-01-01
- while 在触发器内循环以遍历 sql 中表的所有列 2022-01-01
- MySQL 5.7参照时间戳生成日期列 2022-01-01
- 从字符串 TSQL 中获取数字 2021-01-01
- ORA-01830:日期格式图片在转换整个输入字符串之前结束/选择日期查询的总和 2021-01-01
- 使用 VBS 和注册表来确定安装了哪个版本和 32 位 2021-01-01
- MySQL根据从其他列分组的值,对两列之间的值进行求和 2022-01-01
- CHECKSUM 和 CHECKSUM_AGG:算法是什么? 2021-01-01
- 带有WHERE子句的LAG()函数 2022-01-01
- 带更新的 sqlite CTE 2022-01-01