SQL查询要在字段中包含数据而不是新记录

时间:2015-02-24 15:05:17

标签: mysql sql

我已经搜索了这个,但我可能使用了错误的术语。

以下查询

SELECT t1.name, t2.entry FROM t1 
INNER JOIN t2 ON t2.ID = t1.ID 
WHERE t2.meta_key IN ('wp_x1','wp_x2');

返回类似于下面的数据,其中每个meta_key字段有<2个记录

name1,wp_x1_entry
name1,wp_x2_entry
name2,wp_x1_entry
name2,wp_x2_entry

如何修改查询以返回此内容?

name1,wp_x1_entry,wp_x2_entry
name2,wp_x1_entry,wp_x2_entry

表/字段名称已更改为隐藏敏感信息。另外,我知道这些是设计糟糕的表,但我无法更改数据库结构。

这将从C#代码调用mySql数据库。

2 个答案:

答案 0 :(得分:1)

尝试按t1.name和group_concat t2.entry分组。

像这样:

SELECT t1.name, GROUP_CONCAT(t2.entry) FROM t1 
INNER JOIN t2 ON t2.ID = t1.ID 
WHERE t2.meta_key IN ('wp_x1','wp_x2')
GROUP BY t1.name;

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

答案 1 :(得分:1)

在t2加入另一个时间,仅查找wp_x2

SELECT t1.name, t2.entry, t3.entry
FROM t1
  JOIN t2       ON t2.ID = t1.ID and t2.meta_key = 'wp_x1'
  JOIN t2 as t3 ON t3.ID = t1.ID and t3.meta_key = 'wp_x2'

仅返回包含wp_x1和wp_x2的行。如果需要一个/无,请使用LEFT_JOIN。