在另一列中选择 ID 相同但值不同的行

我试了几个小时,读了很多帖子,但还是不知道如何处理这个请求:

我有一张这样的桌子:

+------+------+
|ARIDNR|LIEFNR|
+------+------+
|1     |A     |
+------+------+
|2     |A     |
+------+------+
|3     |A     |
+------+------+
|1     |B     |
+------+------+
|2     |B     |
+------+------+

我想选择的 ARIDNR 发生一次以上与不同的 LIEFNR。

输出应该是这样的:

+------+------+
|ARIDNR|LIEFNR|
+------+------+
|1     |A     |
+------+------+
|1     |B     |
+------+------+
|2     |A     |
+------+------+
|2     |B     |
+------+------+
402522 次浏览

这样应该可以了:

SELECT *
FROM YourTable
WHERE ARIDNR IN (
SELECT ARIDNR
FROM YourTable
GROUP BY ARIDNR
HAVING COUNT(*) > 1
)

其思想是使用内部查询来标识在数据中出现1次以上的 ARIDNR值的记录,然后根据该值集从同一个表中获取所有列。

将同一个表连接回其本身。使用内部联接,以便丢弃不匹配的行。在联接集中,表中的另一行中有一个与 LIEFNR 不同的 ARIDNR 匹配的行。允许这些 ARIDNR 出现在最终集中。

SELECT * FROM YourTable WHERE ARIDNR IN (
SELECT a.ARIDNR FROM YourTable a
JOIN YourTable b on b.ARIDNR = a.ARIDNR AND b.LIEFNR <> a.LIEFNR
)

试试这个,我检查过了,还能用:

SELECT *
FROM Table
WHERE ARIDNR IN (
SELECT ARIDNR
FROM Table
GROUP BY ARIDNR
HAVING COUNT(distinct LIEFNR) > 1
)

你可以简单地通过

SELECT *
FROM test
WHERE ARIDNR IN
(SELECT ARIDNR FROM test
GROUP BY ARIDNR
HAVING COUNT(*) > 1)
GROUP BY ARIDNR, LIEFNR;

谢谢。

用这个

select * from (
SELECT ARIDNR,LIEFNR,row_number() over
(partition by ARIDNR order by ARIDNR) as RowNum) a
where a.RowNum >1
$sql="SELECT * FROM TABLE_NAME WHERE item_id=".$item_id;


$query=mysql_query($sql);


while($myrow=mysql_fetch_array($query)) {


echo   print_r($myrow,1);




}

这是一个 老问题了,但我发现我也需要一个解决方案,这从时间。前面的答案都很好,我个人比较喜欢使用 慢性创伤性脑病,例如:

DECLARE @T TABLE (ARIDNR INT, LIEFNR varchar(5)) --table variable for loading sample data
INSERT INTO @T (ARIDNR, LIEFNR) VALUES (1,'A'),(2,'A'),(3,'A'),(1,'B'),(2,'B'); --add your sample data to it
WITH duplicates AS --the CTE portion to find the duplicates
(
SELECT ARIDNR FROM @T GROUP BY ARIDNR HAVING COUNT(*) > 1
)
SELECT t.* FROM @T t --shows results from main table
INNER JOIN duplicates d on t.ARIDNR = d.ARIDNR --where the main table can be joined to the duplicates CTE

产生以下结果:

1 | A
1 | B
2 | B
2 | A < br/>

Select A.ARIDNR,A.LIEFNR
from Table A
join Table B
on A.ARIDNR = B.ARIDNR
and A.LIEFNR<> B.LIEFNR
group by A.ARIDNR,A.LIEFNR