Mysql SQL将不同大小的表与空值替换连接在一起
我正在处理一个datatable的查询,但我似乎无法让它显示我想要的方式,我不知道这在SQL中是否可能,我想做的是让查询响应一个布尔类型的额外列 目前,我可以运行两个查询,它们都能很好地工作,但我不知道如何将它们连接在一起。下面是我第一个查询的代码,它的作用是返回啤酒。用户已经尝试过,它工作正常,按预期返回Mysql SQL将不同大小的表与空值替换连接在一起,mysql,sql,sql-server,Mysql,Sql,Sql Server,我正在处理一个datatable的查询,但我似乎无法让它显示我想要的方式,我不知道这在SQL中是否可能,我想做的是让查询响应一个布尔类型的额外列 目前,我可以运行两个查询,它们都能很好地工作,但我不知道如何将它们连接在一起。下面是我第一个查询的代码,它的作用是返回啤酒。用户已经尝试过,它工作正常,按预期返回 SELECT * FROM keg.beer JOIN keg.userbeer ON beer.id = userbeer.beer_id WHERE userbeer.use
SELECT *
FROM keg.beer
JOIN keg.userbeer
ON beer.id = userbeer.beer_id
WHERE userbeer.username_id = 1;
第二个查询更简单,只是一个获取啤酒列表的选择
SELECT * FROM keg.beer
我想做的是运行一个查询,让它返回一个带有布尔值的啤酒列表(如果用户尝试过或没有尝试过)。您不会遇到太多无法使用纯“ol SQL”生成的“期望结果”场景。在本例中,您将使用案例陈述来确定此人是否喝过啤酒。您还需要一个左外部联接,这样当筛选的
userid
没有userbeer
记录时,就不会删除来自beer
表的记录:
SELECT
beer.name,
beer.id,
beer.country,
CASE WHEN userbeer.username_id IS NULL THEN 0 ELSE 1 END AS user_tried_beer_boolean
FROM keg.beer
LEFT OUTER JOIN keg.userbeer
ON beer.id = userbeer.beer_id
AND userbeer.username_id = 1;
正如这里的注释中提到的@SeanLange,对userid的WHERE语句的限制将导致删除结果集中需要的记录,因此,我们将username_id=1
的限制移动到左侧外部联接的部分,以便userbeer
表的结果在加入beer
表之前仅限于该用户
现在我需要喝一杯。您不会遇到太多无法用纯“ol SQL”生成的“期望结果”场景。在本例中,您将使用案例陈述来确定此人是否喝过啤酒。您还需要一个左外部联接,这样当筛选的userid
没有userbeer
记录时,就不会删除来自beer
表的记录:
SELECT
beer.name,
beer.id,
beer.country,
CASE WHEN userbeer.username_id IS NULL THEN 0 ELSE 1 END AS user_tried_beer_boolean
FROM keg.beer
LEFT OUTER JOIN keg.userbeer
ON beer.id = userbeer.beer_id
AND userbeer.username_id = 1;
SELECT b.id,
b.name,
CASE WHEN u.username_id IS NOT NULL THEN TRUE ELSE FALSE END AS userdrankbeer
FROM keg.beer b
LEFT JOIN ( SELECT * FROM keg.userbeer WHERE username_id = 1 ) u
ON beer.id = userbeer.beer_id
正如这里的注释中提到的@SeanLange,对userid的WHERE语句的限制将导致删除结果集中需要的记录,因此,我们将username_id=1
的限制移动到左侧外部联接的部分,以便userbeer
表的结果在加入beer
表之前仅限于该用户
现在我需要喝一杯
SELECT b.id,
b.name,
CASE WHEN u.username_id IS NOT NULL THEN TRUE ELSE FALSE END AS userdrankbeer
FROM keg.beer b
LEFT JOIN ( SELECT * FROM keg.userbeer WHERE username_id = 1 ) u
ON beer.id = userbeer.beer_id
)
) 你想要的产出是什么..标准啤酒清单是一个id,名称和国家,加上一个真-假列。@teja可能真的喝醉了:)谢谢所有的帮助,很感激你想要的产出..标准啤酒清单是一个id,名字和国家加上一个真假栏。@teja可能真的喝醉了:)谢谢大家的帮助,我很感激你们在几秒钟内打败了我!必须将userbeer.username\u id=1移动到连接谓词,否则左连接将成为内部连接。:)@事实上你的答案是0.5秒前的Jnevill@SeanLange啊!忘了那部分!我已经更新了答案,将其包括在内。谢谢哈哈,我的意思是添加的是空部分,比我快了几秒钟!必须将userbeer.username\u id=1移动到连接谓词,否则左连接将成为内部连接。:)@事实上你的答案是0.5秒前的Jnevill@SeanLange啊!忘了那部分!我已经更新了答案,将其包括在内。谢谢LOL我的意思是添加is null部分为什么子查询?一个标准的左连接就可以了。为什么要使用子查询?标准的左联接可以正常工作。