php - 带有外连接的复杂 sql 查询
问题描述
有两张桌子
------------------------------
id | Name
------------------------------
1 | Alpha
-----------------------------
2 | Beta
-----------------------------
3 | Gamma
-----------------------------
4 | Delta
-----------------------------
和另一个表 b 与表 a 的外键
b
-----------------------------
id | a_id | Film
-----------------------------
1 | 1 | Bladerunner
-----------------------------
2 | 1 | Star Wars
-----------------------------
3 | 3 | Superman
-----------------------------
4 | 4 | Rollerball
-----------------------------
使用外连接编写一个 SQL 查询,以从表“a”中获取所有没有以“S”开头的电影的名称。
查询结果应该是:
Beta
--------
Delta
解决方案
使用相关子查询not exists
SELECT *
FROM tablea a
LEFT JOIN tableb b
ON a.id = b.a_id
WHERE NOT EXISTS (SELECT 1
FROM tableb b1
WHERE b.a_id = b1.a_id
AND film LIKE 'S%')
或者您可以使用以下查询来避免子查询
SELECT NAME,
Sum(CASE
WHEN film LIKE 'S%' THEN 1
ELSE 0
END)
FROM t1 a
LEFT JOIN t2 b
ON a.id = b.a_id
GROUP BY NAME
HAVING Sum(CASE
WHEN film LIKE 'S%' THEN 1
ELSE 0
END) = 0
输出:
name
Delta
Beta
推荐阅读
- php - 如何将一个类中的对象接受到该类的子类中
- jquery - 一个js api中的jquery geocomplete和markerclusterer包括
- javascript - 如何一次从多个表单中检索值
- c++ - 函数的隐式声明在 gcc 中编译,但在 g++ 中不编译
- python - Python:使用 h5py 和 NumPy 从 MATLAB .mat 文件中读取 str 问题
- javascript - 反应并使用 ReactDOM.createPortal() - 目标容器不是 DOM 元素错误
- arrays - 如何从 .select 找到的数组元素中获取字符串,而 ruby 中没有括号?
- android - 如何在执行 AsyncTask 之前强制更新 UI?
- json - 使用 jq:仅选择具有特定子键的父母
- spring - 使用同步时在 Spring 分区中出现意外