Mysql 在存储过程中查找四个元组的相同列表ID

Mysql 在存储过程中查找四个元组的相同列表ID,mysql,sql,Mysql,Sql,我正在写一个程序。。。 我在这个过程中有4个参数。 我想使用这四个参数从表中找到相同的列表ID 换句话说,如果所有ID都具有相同的列表ID,则返回列表ID,如果 不返回NULL,并承认某些id可能为NULL,而 ID在该表中重复,所以如果ID为null或 重复 困难的部分是,并非所有时候我都设置了四个ID,我可能只设置了两个ID,另外两个设置为NULL 例如: Table A ------------------------ ID List_ID ----------------

我正在写一个程序。。。 我在这个过程中有4个参数。 我想使用这四个参数从表中找到相同的列表ID

换句话说,如果所有ID都具有相同的列表ID,则返回列表ID,如果 不返回NULL,并承认某些id可能为NULL,而 ID在该表中重复,所以如果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被设置为NULL,所以我可能只有1个、2个或全部4个

对不起,如果我没有很好地解释这个。。。但我不知道如何判断这种情况,而且我的知识有限,我需要一些帮助

更新

这接近我所需要的:

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。如何排除这种情况,要检查所有参数是否存在,可以使用COUNT aggregate函数查找元组

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次的列表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
表a
中是唯一的。这就是查询的设置方式。

请参见Ok,但是如果_ID_Param2或_ID_Param3为NULL且不为NULL,该怎么办?您可以使用附加的或WHERE子句轻松处理该问题:WHERE(ID=_ID_Param_1或_ID_Param_1为NULL)。不确定计数的含义是什么,但您可以根据NOTNULL参数的数量更改该数字。这似乎接近于我想要做的,但是如果_ID_Param3或_ID_Param4为NULL或不为NULL该怎么办?我应该更改count(*)=n,不为NULL的参数的数量,我应该使用IF not NULL检查这些参数,并使用SET n=n+1作为全局变量,或者有更好的方法吗?无论如何,谢谢,这非常接近我需要的,我已经接受了你的回答添加了一个更新我的问题,请检查。谢谢