我正在研究数据表的查询,我似乎无法让它显示我想要的,我不知道这是否甚至可能在SQL中我想要做的是获取查询理想情况下响应一个布尔类型的额外列。
目前我可以运行两个查询,它们都运行完美,但我无法弄清楚如何将它们连接在一起下面是我的第一个查询的代码,这是返回啤酒,用户已经尝试过这很好并且正如预期的那样并按预期返回。
SELECT *
FROM keg.beer
JOIN keg.userbeer
ON beer.id = userbeer.beer_id
WHERE userbeer.username_id = 1;
第二个查询更简单,只是选择获取啤酒列表。
SELECT * FROM keg.beer
我想要做的是运行一个查询并让它返回一个啤酒列表,如果用户已经尝试过,则返回一个布尔值。
答案 0 :(得分:4)
你不会遇到太多无法使用简单的'ol SQL生成的“期望结果”的场景。在这种情况下,您将使用CASE语句来确定此人是否尝试过啤酒。您还需要LEFT OUTER JOIN,这样当您的已过滤的beer
没有userid
的{{1}}记录时,您就不会丢弃来自userbeer
表格的记录}:
beer
正如@SeanLange在这里的注释中所提到的,对userid的WHERE语句的限制会导致在结果集中删除所需的记录,因此我们将 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;
的限制移到{{ 1}} username_id = 1
的一部分,以便{<1}}表格结果仅限于该用户 之前它已加入ON
表格。
现在我需要喝一杯。
答案 1 :(得分:0)
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