在SQL

时间:2017-07-03 09:29:46

标签: mysql sql

假设我有一张桌子

  id            value
------        ---------
  10              123
  10              422
  11              441
  11              986
  12              674
  13              648

我需要一个查询,它只返回那些有2个或更多与之关联的值的id。因此,在这种情况下,它只返回ID 10& 11,但我需要记录。

所以结果如下:

 id            value
------        ---------
  10              123
  10              422
  11              441
  11              986

谢谢。

4 个答案:

答案 0 :(得分:3)

select a2.*
from MyTable a2
inner join
(
select a1.id
from MyTable a1
group by a1.id
having count(*) > 1
) a3
on a3.id = a2.id

答案 1 :(得分:0)

假设可以在(id,value)...

上形成一个UNIQUE KEY
SELECT DISTINCT x.*
           FROM my_table x
           JOIN my_table y
             ON y.id = x.id
            AND y.value <> x.value

如果无法在(id,value)上形成UNIQUE KEY,那么这不是严格的RDBMS意义上的表。

答案 2 :(得分:0)

您可以使用此查询:

if(is_page('test.php') && !isset($_GET['r'])){
    if(!headers_sent()){
        header("Refresh: 5;url='http://zasite.com/test.php?r=1'");
    } else {
        echo '<script>window.setTimeout(function () {location.href="http://zasite.com/test.php?r=1";}, 5000);</script>';
    }
}

答案 3 :(得分:0)

对于mysql 8+或mariadb 10.2+,您可以使用计数窗口功能:

select id, value
from (
    select id, value, count(id) over (partition by id) as num_values
    from sometable
) foo
where num_values > 1;