gpt4 book ai didi

两张表之间的MySQL条件

转载 作者:行者123 更新时间:2023-11-29 02:16:42 25 4
gpt4 key购买 nike

表“服务器”:

+----+----------------+
| id | disabled_until |
+----+----------------+
| 1 | 0 | // disabled_until is an epoch timestamp
| 2 | 146893210 | // (irrelevant)
| 3 | 1468969442 |
+----+----------------+

表“server_disables”:

+----+-----------+-------+----------------+
| id | server_id | tld | disabled_until |
+----+-----------+-------+----------------+
| 1 | 1 | .com | 0 |
| 2 | 1 | .org | 1468969900 |
| 2 | 3 | .com | 1468969900 |
+----+-----------+-------+----------------+


我正在尝试进行查询,从 servers 中选择行,其中:

  1. server_disables 中有 0 行,其中 server_disables.server_id = servers.id
  2. server_disables 中有超过 1 行,其中 server_disables.server_id = servers.id 并且 server_disables.disabled_until 小于特定时间(例如,x)

我相信我已经创建了一个可以完成 #2 而不是 #1 的查询。我不知道从哪里继续或如何在 server_disables 中有 0 个匹配行时添加案例。您可以在 OR d.disabled_until IS NULL 中看到我的尝试,但它不起作用。

查询:

SELECT s.* FROM servers s 
INNER JOIN server_disables d ON (d.server_id = s.id AND d.tld = '.com')
WHERE (s.disabled_until < 1468984373)
AND (d.disabled_until < 1468984373 OR d.disabled_until IS NULL)
ORDER BY RAND() LIMIT 5

我的问题是如何让我的查询也显示“服务器”表中的行,其中有 0 行从 INNER JOIN 合并。

最佳答案

你应该使用LEFT JOIN,也许有重复的行,所以你可能还需要使用DISTINCT,试试这个:

SELECT DISTINCT s.* FROM servers s 
LEFT JOIN server_disables d ON (d.server_id = s.id AND d.tld = '.com')
WHERE (s.disabled_until < 1468984373)
AND (d.disabled_until IS NULL OR d.disabled_until < 1468984373)
ORDER BY RAND() LIMIT 5

关于两张表之间的MySQL条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38471806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com