SQL:使用条件结果字段查询多个表(抱歉我什至不知道如何正确询问)

问题描述 投票:0回答:1

考虑以下示例表:

用户:

id_用户 名字
1 保罗
2 卡罗琳

旅行:

id_旅行 id_用户
1 1
2 1
3 2

旅行天数:

id_tdays id_旅行 当天有活动
1 1
2 1
3 1 是的
4 2
5 2
6 3
7 3 是的
8 4 是的

如果我执行以下查询:

SELECT 
t.id_travel,
u.name,
td.day_has_activities
FROM travel t
left join users u on u.id_user = t.id_user
left join travel_days td on td.id_travel = t.id_travel

由于第一趟旅程有三天,而第二趟旅程和第三趟旅程各有两天,结果将是这样的:

id_旅行 id_用户 当天有活动
1 保罗
1 保罗
1 保罗 是的
2 保罗
2 保罗
3 卡罗琳
3 卡罗琳 是的

我需要有唯一的行程行,所以我考虑使用 DISTINC,但 has_activities 字段随机显示“是”或“否”。

我需要知道每次旅行是否包含有活动的日子,所以完美的结果是这样的:

id_旅行 id_用户 旅行有活动
1 保罗 是的
2 保罗
3 卡罗琳 是的

我尝试了类似的方法,但它没有运行:

SELECT 
t.id_travel,
u.name,
if ((select count(td.day_has_activities) from t where td.day_has_activities like 'yes') > 0, 'yes', 'no') as travel_has_activities
FROM travel t
left join users u on u.id_user = t.id_user
left join travel_days td on td.id_travel = t.id_travel
sql multiple-tables
1个回答
0
投票

您需要通过 id_travel 获取最大 day_has_activities,然后使用

LEFT JOIN
加入您的表:

select t.id_travel, u.name, td.day_has_activities as travel_has_activities
from travel t
left join users u on u.id_user = t.id_user
left join (
  select id_travel, max(day_has_activities) as day_has_activities
  from travel_days
  group by id_travel
) td on td.id_travel = t.id_travel
© www.soinside.com 2019 - 2024. All rights reserved.