gpt4 book ai didi

mysql - 如果连接表中的列值为 0 或不存在,如何通过连接选择行

转载 作者:行者123 更新时间:2023-11-29 21:03:43 24 4
gpt4 key购买 nike

重要的是要知道,我在这里处理旧数据,因此无法重组数据。

然后问题是,我有3个表:类别、记录和特殊状态。现在我需要一个查询,该查询将始终找到所有类别,但我只需要具有某种特殊状态的记录。我的问题是,并非所有记录都有特殊状态,但没有一个记录等于状态 0(表示“打开”)。那么,如何找到所有“打开”的记录呢?要么基于不存在相应的special_status行,要么基于该行中的状态值= 0?

我的 table 是:

CREATE TABLE IF NOT EXISTS `categories` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`position` tinyint(4) NOT NULL,
PRIMARY KEY (`id`)
)

CREATE TABLE IF NOT EXISTS `records` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`cat_id` int(10) unsigned NOT NULL,
`customer` int(10) unsigned NOT NULL,
`created` datetime NOT NULL,
`created_by` int(10) unsigned NOT NULL,
`title` tinytext COLLATE utf8_unicode_ci NOT NULL,
`text` text COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
)

CREATE TABLE IF NOT EXISTS `special_status` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` int(10) unsigned NOT NULL,
`type` tinyint(4) NOT NULL DEFAULT '1',
`status` tinyint(1) NOT NULL,
PRIMARY KEY (`id`)
)

类别和记录之间的关系是显而易见的。记录和special_status之间的关系基于special_status.parent_id = reports.id ANDspecial_status.type = 2

在这里您可以找到一个有效的Fiddle .

但是,查询错误(基于我收到的答案)。我获得了许多记录,而我只需要“打开”记录(special_status.status = 0 或没有现有的相应的special_status 行)。下面是我期望的结果(括号之间是错误查询中显示的记录 ID)。

cat record              status
1 11 Title C false
1 13 Title E (null)
1 14 Title F false
1 (null) (null) (null) (18)
2 (null) (null) (null) (9)
2 (null) (null) (null) (12)
3 (null) (null) (null)
4 (null) (null) (null)
5 (null) (null) (null)
6 (null) (null) (null)
7 (null) (null) (null)
8 (null) (null) (null)
9 (null) (null) (null)
10 10 Title B (null)
11 (null) (null) (null)
12 15 Title G (null)
12 16 Title H (null)
12 17 Title I (null)

最佳答案

据我了解,您需要记录和special_status中的所有数据,无论它们是否与类别匹配。所以“LEFT JOIN”看起来很合适。据W3School报道

The LEFT JOIN keyword returns all rows from the left table (table1), with the matching rows in the right table (table2). The result is NULL in the right side when there is no match.

在这种情况下,您的查询如下所示。

SELECT categories.id, categories.position,records.id, 
records.title, special_status.status
FROM categories
LEFT JOIN records
ON records.cat_id=categories.id
LEFT JOIN special_status
ON special_status.parent_id = records.id
AND special_status.type = 2;

Here正在使用 fiddle 。

关于mysql - 如果连接表中的列值为 0 或不存在,如何通过连接选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37000254/

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