gpt4 book ai didi

MySQL查询连接超过1个相关表

转载 作者:行者123 更新时间:2023-11-29 02:00:05 26 4
gpt4 key购买 nike

我的问题是关于在不复制主行的情况下将一个属性的多个值放入一个字符串中。

我会用一个简单的例子来解释我的问题:

实体-关系图

Diagram

例如,使用以下数据:

enter image description here

我想获取“TABLE”的某些元素,其中一个字段中的 Property_1 串联,另一个字段中的 Property_2 串联。但是,永远不要重复“TABLE”的行是很重要的

例如,获取 Row1 和 Row4 的查询应该如下所示:

1 Row1 "P1_1, P1_2" "P2_1, P2_2"
4 Row4 "P1_3" "P2_3"

数据库结构/数据示例:

CREATE TABLE table1(
id INT AUTO_INCREMENT,
value VARCHAR(10),
PRIMARY KEY(id)
) ENGINE=INNODB DEFAULT CHARSET=latin1;

CREATE TABLE property_1(
id INT AUTO_INCREMENT,
value VARCHAR(10),
table1 INT,
PRIMARY KEY(id),
FOREIGN KEY (table1) REFERENCES table1(id) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=INNODB DEFAULT CHARSET=latin1;

CREATE TABLE property_2(
id INT AUTO_INCREMENT,
value VARCHAR(10),
table1 INT,
PRIMARY KEY(id),
FOREIGN KEY (table1) REFERENCES table1(id) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=INNODB DEFAULT CHARSET=latin1;
INSERT INTO table1 (value) VALUES
('Row1'),('Row2'),('Row3'),('Row4'),('Row5'),('Row6');
INSERT INTO property_1 (value, table1) VALUES
('P1_1', 1), ('P1_2', 1), ('P1_3', 4), ('P1_4', 6);
INSERT INTO property_2 (value, table1) VALUES
('P2_1', 1), ('P2_2', 1), ('P2_3', 4), ('P2_4', 5);

我尝试了一些查询,例如:

SELECT t.*, GROUP_CONCAT(p1.value), GROUP_CONCAT(p2.value) 
FROM table1 t
LEFT JOIN property_1 p1 ON p1.table1=t.id
LEFT JOIN property_2 p2 ON p2.table1=t.id
WHERE t.id IN (1,4)
GROUP BY t.id;

但结果是 property_1 和 property_2 字符串中的值重复。

所以:

如何获取 table1 的不同行,并将它们的属性连接成字符串?

最佳答案

快速回答:在您的 group_concat 中使用 DISTINCT - 就像这样:

SELECT t.*, GROUP_CONCAT(distinct p1.value), GROUP_CONCAT(distinct p2.value) 
FROM table1 t
LEFT JOIN property_1 p1 ON p1.table1=t.id
LEFT JOIN property_2 p2 ON p2.table1=t.id
WHERE t.id IN (1,4)
GROUP BY t.id;

SQLFiddle here .

关于MySQL查询连接超过1个相关表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17233280/

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