【发布时间】:2011-12-13 17:06:25
【问题描述】:
我想我需要一个提示,往哪个方向走。 跟进我的other question,我正在尝试使用 MySQL 对 3 个表执行 sql 查询。
表 1:产品的“基础”信息
id, productnumber
1,45
表 2:每个产品 ID 的“country_specifics”
id, countrycode,name
1,"DE","Produkt 1"
1,"US","Product 1"
好的,一个
SELECT B.id,C.name,C.countrycode
FROM base AS B
INNER JOIN country_specifics AS C ON B.id=C.id
WHERE B.id=1 AND C.countrycode='US';
给我我想要的:
1,"Product 1","US"
但是:
我有第三张桌子:
表 3:每个产品 ID 的“功能”
id,feature
1,"feature 1"
1,"feature 2"
我的查询的最终结果应该以某种方式额外包含产品具有的功能。 我尝试了一个额外的
INNER JOIN features AS F ON b.id=f.id
但这将返回两行(我明白为什么):
1,"Product 1","US","feature 1"
1,"Product 1","US","feature 2"
但我认为这不是我想要的。 我想要的是特征字段的一种数组:
1,"产品 1","US","功能 1,功能 2"
结果。我知道(或相当肯定)SQL 中没有数组,但最接近的呢?我可以在 1 个查询中做到这一点吗?显然,我可以简单地开始第二个查询,但这是最好的选择吗? 我应该搜索哪个关键字?
感谢阅读,马林巴琴
编辑
谢谢大家的帮助,真的!
我只是想澄清我的问题:我不一定需要数组或类似的东西。我想了解获取“该产品的所有数据”的最佳(最有效、最不容易出错)方法是什么。
如果您告诉我接受 2 行作为结果并使用这是最好的方法,我会这样做。 我只是认为他们在设计 SQL 时就想到了这个问题并准备好了解决方案,而我正在努力寻找那个解决方案。
编辑 2:
再次,我很抱歉误导人们认为我需要一个逗号分隔的字符串。我试图说明我期待什么样的数据。
我很欣赏指向 group_concat 的指针,但我觉得 stored procedure 有 2 个查询,如 jmacinnes 和 Sachin 所述,是更清洁的方式。
谢谢你,stackoverflow 社区。p>
【问题讨论】:
-
这适用于 Sybase ASE、SQL Server、Oracle、MYSQL?
-
mysql - 来自第一段第二句。
-
@marimba - 在你使用 MySQL 吗? (不同风格的 SQL 有不同的方法来解决这个问题。)
-
是的,MySQL。我现在加粗了。我以为没那么重要,但我开始明白没有标准的解决方案。
标签: mysql sql join multiple-tables