Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找至少两行,它们对应于具有不同值的相同id_Sql - Fatal编程技术网

Sql 查找至少两行,它们对应于具有不同值的相同id

Sql 查找至少两行,它们对应于具有不同值的相同id,sql,Sql,查找同一客户端中至少有一个状态为1未删除行和一个状态为-1已删除行的行,如下所示: 状态=1表示未删除 state=-1表示已删除 e、 例如,输出将如下所示: row_id client_id client_name state 1 10000 ABC Ltd. -1 2 10000 ABC Ltd. -1 3 10000 ABC Ltd. 1 4 20000

查找同一客户端中至少有一个状态为1未删除行和一个状态为-1已删除行的行,如下所示:

状态=1表示未删除

state=-1表示已删除

e、 例如,输出将如下所示:

row_id  client_id  client_name   state 
1       10000      ABC Ltd.       -1
2       10000      ABC Ltd.       -1
3       10000      ABC Ltd.        1
4       20000      ABCDE Ltd.     -1
5       20000      ABCDE Ltd.     -1
6       20000      ABCDE Ltd.      1
7       30000      ABCDEFG Ltd.    1
8       30000      ABCDEFG Ltd.   -1
在这种情况下,不会显示客户端id 40000和50000,因为它们只有一条状态为1的记录,而没有任何相应状态为-1的记录。

存在:

或者使用返回所有所需客户端ID的子查询:

select * from tablename 
where client_id in (
  select client_id
  from tablename
  group by client_id
  having min(state) = -1 and max(state) = 1
)
您可以使用exists:

由于-1和1是唯一可能的值,您只需确保存在具有相同客户端id和不同状态的另一条记录。

您可以按客户端id分组并计算不同的状态,以查看哪些客户端具有多个状态:

然后,如果需要查看原始表的结果,可以在CTE或子查询中使用:

SELECT A.*
FROM Table A
JOIN 
(
    SELECT client_id
    FROM Table
    GROUP BY client_id
    HAVING COUNT(DISTINCT(state)) > 1
) B
ON A.client_id = B.client_id
ORDER BY A.row_id

Ms sql server和mysql是两种不同的产品,具有不同的sql实现。我删除了冲突的产品标签。请加上你实际使用的那个!
select * from tablename 
where client_id in (
  select client_id
  from tablename
  group by client_id
  having min(state) = -1 and max(state) = 1
)
select t.*
from mytable t
where exists (
    select 1 from mytable t1 where t1.client_id = t.client_id and t1.state <> t.state
)
SELECT client_id
from Table
GROUP BY client_id
HAVING COUNT(DISTINCT(state)) > 1
SELECT A.*
FROM Table A
JOIN 
(
    SELECT client_id
    FROM Table
    GROUP BY client_id
    HAVING COUNT(DISTINCT(state)) > 1
) B
ON A.client_id = B.client_id
ORDER BY A.row_id