sql - 你能交叉加入一个查询的结果吗
问题描述
我有两个 ID 喜欢交叉连接的查询。这样的事情可能吗?
SELECT concat_ws(' ',first_name, last_name) adopters, d.name
FROM adopters
WHERE NOT EXISTS (SELECT adopter_id FROM dog_adoptions where adopter_id = id)
CROSS JOIN (SELECT name
FROM dogs
WHERE NOT EXISTS (SELECT dog_id FROM dog_adoptions WHERE dog_id = id)) d
对于上下文,这里是 sql fiddle 链接:http ://sqlfiddle.com/#!17/ac120/4349
问题是:“尚未选择狗的收养者收养并生成收养者和可用狗的所有可能组合。”
解决方案
是的,您只需要正确的语法。 CROSS JOIN
-- 与所有JOIN
运算符一样 -- 是子句中识别的二元运算符。FROM
所以你需要把它放在那里:
SELECT concat_ws(' ', a.first_name, a.last_name) as adopter, d.name
FROM adopters a CROSS JOIN
(SELECT d.name
FROM dogs d
WHERE NOT EXISTS (SELECT 1 FROM dog_adoptions da WHERE da.dog_id = d.id)
) d
WHERE NOT EXISTS (SELECT 1 FROM dog_adoptions da where da.adopter_id = a.id);
您还可以摆脱FROM
子句中的子查询:
SELECT concat_ws(' ', a.first_name, a.last_name) as adopter, d.name
FROM adopters a CROSS JOIN
dogs d
WHERE NOT EXISTS (SELECT 1 FROM dog_adoptions da where da.adopter_id = a.id) AND
NOT EXISTS (SELECT 1 FROM dog_adoptions da WHERE da.dog_id = d.id)
推荐阅读
- javascript - 带有 document.querySelectorAll 的多个选择器
- r - 在使用 facet_wrap 创建的直方图上绘制均值
- laravel - Laravel 多对多关系查询
- python - 与在 python 脚本中作为子进程 (['tail','-f','filename.txt']) 运行的 shell tail 相比,pytail 的效率如何?
- javascript - 内联javascript中的空字符“代码”
- scala - Kafka Streams Scala groupBy 类型转换问题
- twitter-bootstrap - Bootstrap4 折叠组件中图标的意外行为 - 无法水平显示图标
- java - PDFBox 2.0:来自 PDFTextStripper 的不可见文本
- javascript - 无法根据使用 Angular.js 检查的复选框禁用选择框
- vbscript - vb脚本提取可执行jar文件响应