当初始联接的结果具有空值(我要保留!)时,加入第三表。

发布于 2025-02-06 02:55:15 字数 3674 浏览 2 评论 0原文

我有3张表:

  1. event_timestamps with colums race_number,timestamp
  2. event_entry with race_number,user_id
  3. 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_IDMAX(TIMESTAMP)RACE_NUMBER计数(事件...)
NULL2022-05-28 12:30:0110005
146942022-05-28 12:30:0232 325
376172022-05-28 12:30: 17445
161342022-05-28 12:34:37245

但是当我加入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);```
firstNamelastnamemax(timestamp)race_numbercount(event ....)
(Albert阿尔伯特·科尔斯Coles) 12:30:02325
VinceButre12:30:17445
JohnPlessis12: 34:37245

因此,我希望Race_number 1000(例如)在firstName,lastName中以空值显示。 任何帮助都将不胜感激,因为这打破了我的新手大脑!

Events_timestamps与用户完成圈的同一Race_number有多次发生。我们通过使用最后一圈时间(最大时间戳)并从那里进行排序来计算圈圈和创建等级。

I have 3 tables:

  1. event_timestamps with colums Race_number, timestamp
  2. event_entry with Race_number, User_id
  3. 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_idmax(timestamp)race_numbercount(event...)
NULL2022-05-28 12:30:0110005
146942022-05-28 12:30:02325
376172022-05-28 12:30:17445
161342022-05-28 12:34:37245

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);```
firstnamelastnamemax(timestamp)race_numbercount(event....)
AlbertColes12:30:02325
VinceButre12:30:17445
JohnPlessis12:34:37245

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

醉南桥 2025-02-13 02:55:19

尝试这样的尝试:

SELECT user.firstname, user.lastname, s.timestamp, s.race_number, s.user_id, s.count 
FROM (
    SELECT event_entry.user_id as user_id, max(timestamp) as timestamp, event_timestamps.race_number as race_number, count(event_timestamps.race_number) as count 
    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, event_entry.user_id
) s
LEFT JOIN user on user.user_id = s.user_id
order by s.count desc , s.timestamp

就像@marshal_c所说,内在连接不起作用,因为它摆脱了无效,即。 sql join和不同类型的join

也喜欢 对于所有列,您的代码都缺少组。当您的SQL工作起作用时,我是在MariadB中工作的,在这种情况下,该元素(相当于Oralce的top()

在您的方案中,您也应该有某种完整性规则,这将防止具有相同种族编号(race_number)的多个用户(user_id)。如果您的数据库中有Thouse记录,则行将开始重复。

还请注意,某些数据库(例如MariaDB)可能会在表中遇到user的问题,因为命名的表被用于身份验证到数据库中(in Information_scheme

Try it like this:

SELECT user.firstname, user.lastname, s.timestamp, s.race_number, s.user_id, s.count 
FROM (
    SELECT event_entry.user_id as user_id, max(timestamp) as timestamp, event_timestamps.race_number as race_number, count(event_timestamps.race_number) as count 
    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, event_entry.user_id
) s
LEFT JOIN user on user.user_id = s.user_id
order by s.count desc , s.timestamp

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 (in information_scheme)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文