mysql - SQL 条件连接挑战

标签 mysql sql join conditional-statements

我在 mysql 数据库中有 2 个表存储和共享。我试图避免 IN 子句。请参阅下文了解更多详情

select id, user_id from stores where user_id =7;
+----+---------+
| id | user_id |
+----+---------+
| 36 |       7 |
| 37 |       7 |


select stores_id,share_id from shares where share_id=7;
+-----------+----------+
| stores_id | share_id |
+-----------+----------+
|        15 |        7 |
|        38 |        7 |

现在我运行这个

SELECT stores.id
FROM   stores
WHERE  user_id = 7
UNION
(SELECT stores.id
 FROM   stores
 WHERE  id IN (SELECT stores_id
               FROM   shares
               WHERE  share_id = 7)); 

要得到以下结果:

+----+
| id |
+----+
| 36 |
| 37 |
| 15 |
| 38 |
+----+

问题 如何重写查询以便不使用 IN 关键字。?

最佳答案

您可以使用EXISTS:

WHERE EXISTS
       ( SELECT 1
           FROM shares
          WHERE share_id = 7
            AND stores_id = stores.id
       )

加入:

JOIN shares
  ON shares.stores_id = stores.id
 AND shares.share_id = 7

(请注意,JOIN 可能会返回某些存储的多个副本,但由于 UNION 暗示 SELECT DISTINCT,因此实际上不会影响您的最终结果集。)

关于mysql - SQL 条件连接挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11478287/

相关文章:

php - zf2.如何处理循环 cli 脚本中 mysql 连接的超时?

mysql - 您是否必须连接表 "ON"字段,或者您可以在 where 子句中将它们等同起来?

mysql - SQL - 删除字段中的重复项

sql - 从两个日期和时间之间的日期范围中选择数据

python - 操作数类型与参数化 UPDATE 查询冲突

MySQL - 1 个包含 100 列的大表或拆分为 5 个表并 JOIN

mysql - SQL 查询建议(用连接替换存在)

mysql - 计算 MySQL 表中时间戳内的天数

php - 在 MySQL 中使用 SELECT DISTINCT 从数据中删除非字母字符

mysql - 缓冲区长度小于 mysql percona 集群中的预期有效负载长度