当初始联接的结果具有空值(我要保留!)时,加入第三表。
我有3张表:
- event_timestamps with colums race_number,timestamp
- event_entry with race_number,user_id
- with user_id,firstName,lastName,
我想找到与user_id链接到user_id的race_numbers,以及我通过加入event_timestamps and EventAmpAmps and event_entamps and event_entamps and event_entamps and event_entamps and event_entampers_entry_entry raps。 。
select event_entry.user_id, max(timestamp), event_timestamps.race_number, count(event_timestamps.race_number)
from event_timestamps
left join event_entry on event_timestamps.race_number = event_entry.race_number and event_entry.event_id=430
where timestamp > '2022-05-28 11:50:00' and timestamp < '2022-05-29'
group by event_timestamps.race_number
order by count(event_timestamps.race_number) desc , max(timestamp);
输出
USER_ID | MAX(TIMESTAMP) | RACE_NUMBER | 计数(事件...) |
---|---|---|---|
NULL | 2022-05-28 12:30:01 | 1000 | 5 |
14694 | 2022-05-28 12:30:02 | 32 32 | 5 |
37617 | 2022-05-28 12:30: 17 | 44 | 5 |
16134 | 2022-05-28 12:34:37 | 24 | 5 |
但是当我加入TBL时,无效的值就消失了。我想显示null,以便查看我们是否缺少用户数据。 此查询有效的作品,但无效的值未显示:
select user.firstname, user.lastname, max(timestamp), event_timestamps.race_number, count(event_timestamps.race_number)
from event_timestamps
left join event_entry on event_timestamps.race_number = event_entry.race_number
inner join user on user.user_id = event_entry.user_id
where timestamp > '2022-05-28 11:50:00' and timestamp < '2022-05-29' and event_entry.event_id=430
group by event_timestamps.race_number
order by count(event_timestamps.race_number) desc , max(timestamp);```
firstName | lastname | max(timestamp) | race_number | count(event ....) |
---|---|---|---|---|
(Albert | 阿尔伯特·科尔斯 | Coles) 12:30:02 | 32 | 5 |
Vince | Butre | 12:30:17 | 44 | 5 |
John | Plessis | 12: 34:37 | 24 | 5 |
因此,我希望Race_number 1000(例如)在firstName,lastName中以空值显示。 任何帮助都将不胜感激,因为这打破了我的新手大脑!
Events_timestamps与用户完成圈的同一Race_number有多次发生。我们通过使用最后一圈时间(最大时间戳)并从那里进行排序来计算圈圈和创建等级。
I have 3 tables:
- event_timestamps with colums Race_number, timestamp
- event_entry with Race_number, User_id
- user with user_id, Firstname, lastname
I want to find race_numbers that are not linked to a user_id, and count laps while I'm at it by Joining event_timestamps and event_entry.
select event_entry.user_id, max(timestamp), event_timestamps.race_number, count(event_timestamps.race_number)
from event_timestamps
left join event_entry on event_timestamps.race_number = event_entry.race_number and event_entry.event_id=430
where timestamp > '2022-05-28 11:50:00' and timestamp < '2022-05-29'
group by event_timestamps.race_number
order by count(event_timestamps.race_number) desc , max(timestamp);
Output
user_id | max(timestamp) | race_number | count(event...) |
---|---|---|---|
NULL | 2022-05-28 12:30:01 | 1000 | 5 |
14694 | 2022-05-28 12:30:02 | 32 | 5 |
37617 | 2022-05-28 12:30:17 | 44 | 5 |
16134 | 2022-05-28 12:34:37 | 24 | 5 |
But when I join tbl.user the Null value disappears. I want to display the NULL so I can see if we are missing user data.
This query sort of works but the NULL value is not displaying:
select user.firstname, user.lastname, max(timestamp), event_timestamps.race_number, count(event_timestamps.race_number)
from event_timestamps
left join event_entry on event_timestamps.race_number = event_entry.race_number
inner join user on user.user_id = event_entry.user_id
where timestamp > '2022-05-28 11:50:00' and timestamp < '2022-05-29' and event_entry.event_id=430
group by event_timestamps.race_number
order by count(event_timestamps.race_number) desc , max(timestamp);```
firstname | lastname | max(timestamp) | race_number | count(event....) |
---|---|---|---|---|
Albert | Coles | 12:30:02 | 32 | 5 |
Vince | Butre | 12:30:17 | 44 | 5 |
John | Plessis | 12:34:37 | 24 | 5 |
So I want race_number 1000 (for example) to display as well with NULL values in firstname, lastname.
Any assistance would be much appreciated because this is breaking my novice brain!
The events_timestamps has multiple occurances of the same race_number as the user completes laps. We count the laps and creat rank by using the last lap time (MAX timestamp) and sorting from there.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试这样的尝试:
就像@marshal_c所说,内在连接不起作用,因为它摆脱了无效,即。 sql join和不同类型的join
也喜欢 对于所有列,您的代码都缺少组。当您的SQL工作起作用时,我是在MariadB中工作的,在这种情况下,该元素(相当于Oralce的
top()
)在您的方案中,您也应该有某种完整性规则,这将防止具有相同种族编号(
race_number
)的多个用户(user_id
)。如果您的数据库中有Thouse记录,则行将开始重复。还请注意,某些数据库(例如MariaDB)可能会在表中遇到
user
的问题,因为命名的表被用于身份验证到数据库中(inInformation_scheme
)Try it like this:
like @Marshal_c said, inner join doesn't work, cause it gets rid of NULLs, viz. SQL JOIN and different types of JOINs
also like @Honk_der_Hase points out, your code is missing group by for all columns. When your SQL works, i asume, that you work in MariaDB, which takes in this case first found element (equivalent of ORALCE's
TOP()
)In your scenario, you should also have some kind of integrity rule, which will prevent from having multiple users (
user_id
) with same race number (race_number
). If you had thouse records in your database, the rows would start duplicating.Also be aware, that some databases (like MariaDB) can have problems with table called
user
because table named like that is used for authentication into database (ininformation_scheme
)