MySQL基于条件连接两个表

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_fromswp_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_tousers表连接起来。但我还需要将WHERE子句中第二个条件的swp_fromusers表连接起来。我如何才能做到这一点?

简而言之,如果满足第一个WHERE条件,我需要使用swp_to将查询与users表连接。如果满足第二个WHERE条件(OR之后),那么我希望连接使用swp_from而不是swp_to。每行都应该发生这种情况。PHP条件逻辑解决方法也可以。

推荐答案

条件应移至ON子句。

在MySQL中,可以使用CASE表达式返回布尔表达式的结果(如10fortruefalse),如下所示:

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基于条件连接两个表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)