我的表'详情'看起来像这样,
select a.id, b.id, a.Name, a.city, b.city
from Details a join Details b on a.Name = b.Name
where a.City <> b.City
我想在一行的“城市”列中选择包含不同值的相同名称。
我写了以下查询
id id Name City City
1 2 Arun Chennai Mumbai
2 1 Arun Mumbai Chennai
3 4 Raj Bangalore Chennai
4 3 Raj Chennai Bangalore
输出为
id id Name City City
1 2 Arun Chennai Mumbai
3 4 Raj Bangalore Chennai
但我需要输出一行同时包含id和City的
$count = 1;
foreach ($DefaultSizes as &$def)
{
if(in_array($def['Size'],$ExistingSizes) === false)
{
echo "$def[Size]<br>";
$count++;
}
}
请建议
答案 0 :(得分:0)
试试这个:
select a.id, b.id, a.Name, a.city, b.city
from Details a
inner join Details b on a.Name = b.Name and a.id < b.id
注意:只要始终每Name
有两条记录,此功能就会有效。如果您有一条或两条记录,则可以使用LEFT JOIN
代替INNER JOIN
。
修改:如果每个Name
可以有一个,两个或三个记录,那么您的查询可以表达如下:
select a.id, b.id, a.Name, a.city, b.city
from Details a
left join Details b on a.Name = b.Name and a.id < b.id
left join Details c on a.Name = c.Name and b.id < c.id
注意:如果记录数量动态变化,那么您必须使用某种类型的字符串连接分组,相当于MySQL中使用的GROUP_CONCAT
。
答案 1 :(得分:0)
我不知道你为什么需要ID&amp;同一组中多列的城市。
但这可能会对你有所帮助(假设RDBMS:SQL Server)
SELECT NAME, STUFF((
SELECT ',' + City
FROM #DETAILS D2
WHERE D1.NAME = D2.NAME
FOR XML PATH('')
), 1, 1, '') as Cities
FROM #DETAILS D1
GROUP BY NAME
这将为您提供类似
的结果+------+-------------------+
| Name | Cities |
+------+-------------------+
| Arun | Chennai,Mumbai |
| Raj | Bangalore,Chennai |
+------+-------------------+
答案 2 :(得分:0)
您可以替换您的表名。在这里,我使用了内连接。
SELECT T1.ID,T2.ID,T1.Name,T1.City,T2.City
FROM your_table T1
INNER JOIN your_table T2
ON T1.ID < t2.ID
WHERE T1.Name = T2.Name