我正在写一个过程...在此过程中,我有4个参数。我想使用此四个参数从表中找到相同的列表ID。
用其他单词,如果所有ID具有相同的list_id,则返回list_id,如果 不返回null,并承认某些ID可能为空,有些ID IDS在该表中重复重复,因此如果ID为null或 重复
困难的部分是,并非所有我都设置了四个ID的时间,我可能只有两个ID和其他两个设置为 null 。
例如:
Table A
------------------------
ID List_ID
------------------------
1 10
2 10
3 10
4 10
我看到的唯一解决方案就是这样:
SET id1 = (Select List_ID From Table_A Where ID = _ID_Param1);
SET id2 = (Select List_ID From Table_A Where ID = _ID_Param2);
SET id3 = (Select List_ID From Table_A Where ID = _ID_Param3);
SET id4 = (Select List_ID From Table_A Where ID = _ID_Param4);
#Then I have to check if all ids are same
IF id1 = id2 = id3 = id4 THEN I found the same List_ID
有时将_id_param设置为空,所以我可能只有1或2或全部4
对不起,如果我不太解释这一点...但是我不知道该怎么说,我的知识有限,我需要一些帮助
update
这接近我需要的东西:
SELECT
IF( (
MIN( List_ID ) = MAX( List_ID )
AND COUNT( * ) = (Select Count(*) From (SELECT _ID_Param1 AS val
UNION ALL
SELECT _ID_Param2
UNION ALL
SELECT _ID_Param3
UNION ALL
SELECT _ID_Param4) Temp Where Temp.val is not null
) ) , List_ID, NULL
) AS LID
FROM table_a
WHERE ID IN ( _ID_Param1, _ID_Param2, _ID_Param3, _ID_Param4 )
唯一错误的是,即使表中不存在参数,并且有其他参数的重复,它将返回list_id,并且对其进行了两次计数。如何排除这种情况,检查是否存在所有参数
您可以在一个查询中执行此操作:
select @all_same := (min(List_ID) = max(List_ID) and count(*) = 4)
from table_a
where id in (_ID_Param1, _ID_Param2, _ID_Param3, _ID_Param4);
这假设每个id
在table_a
中都是唯一的。这就是您的查询的设置。
您可以使用计数汇总函数查找元组
Select List_ID, COUNT(*) as tuple
FROM Table_A
WHERE ID = _ID_Param_1 OR ID = _ID_Param_2 ... etc
GROUP BY List_ID
HAVING COUNT(*) = 4;
这将返回给定参数集4次出现4次的list_ids。