gpt4 book ai didi

MySQL连接,连接表中的空行

转载 作者:行者123 更新时间:2023-11-29 14:58:10 24 4
gpt4 key购买 nike

我有三个表,我想以一种方式连接,该方式可以生成一个表中的所有记录以及另一个表中的任何匹配记录或 NULL。必须返回第一个表中的所有记录。我以为我以前曾这样做过,但我不记得何时何地,而且 MySQL 根本不发挥作用。

SELECT VERSION();
5.0.51a-3ubuntu5.7

/* Some table that may or may not be needed, included to give context */
CREATE TABLE `t1` (
`a` int(4) NOT NULL,
`a_name` varchar(10) NOT NULL,
PRIMARY KEY (`a`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `t2` ( /* "One table" */
`b` int(2) NOT NULL,
`b_name` varchar(10) NOT NULL,
PRIMARY KEY (`b`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `t3` ( /* "Another table" */
`a` int(4) NOT NULL,
`b` int(2) NOT NULL,
PRIMARY KEY (`a`,`b`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO t1 VALUES (1, '1-one'),(2, '1-two'),(3, '1-three');
INSERT INTO t2 VALUES (1, '2-one'),(2, '2-two'),(3, '2-three'),
(4, '2-four'),(5, '2-five');
INSERT INTO t3 VALUES (1,1),(1,2),(1,3),(1,4),(2,2),(2,5);

t3t1t2 的联结表。对于任何 a=n,我正在查找的结果集应如下所示:

n=1
b | b_name | a
-------------------
1 | 2-one | 1
2 | 2-two | 1
3 | 2-three | 1
4 | 2-four | 1
5 | 2-five | NULL

n=2
b | b_name | a
-------------------
1 | 2-one | NULL
2 | 2-two | 2
3 | 2-three | NULL
4 | 2-four | NULL
5 | 2-five | 2

n=7
b | b_name | a
-------------------
1 | 2-one | NULL
2 | 2-two | NULL
3 | 2-three | NULL
4 | 2-four | NULL
5 | 2-five | NULL

结果集中a的值实际上并不重要,只要它明确反射(reflect)t3中记录的存在或不存在即可(这有意义吗? )。

查询

SELECT t2.b, t2.b_name, a
FROM t2
LEFT /* OUTER */ JOIN t3 ON t3.b = t2.b
WHERE (
a = 2
OR
a IS NULL
);

返回

b | b_name  | a
-------------------
2 | 2-two | 2
5 | 2-five | 2

这可以做到吗?

最佳答案

SELECT t2.b, t2.b_name, MAX(IF(a=2, a, NULL)) AS a
FROM t2
LEFT OUTER JOIN t3
ON t3.b = t2.b
GROUP by t2.b
ORDER BY b ASC;

关于MySQL连接,连接表中的空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3986447/

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