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

时间:2017-09-19 21:04:29

标签: mysql sql database mysqli

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

  

换句话说,如果所有ID都具有相同的List_ID,则返回List_ID,if   不返回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,即使表中不存在参数并且存在其他参数的副本并且它将计数两次。如何排除这种情况,检查所有参数是否存在

2 个答案:

答案 0 :(得分:1)

You can use the COUNT aggregate function to find tuples

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;

This will return List_IDs that appears 4 times for a given set of parameters.

答案 1 :(得分:1)

您可以在一个查询中执行此操作:

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);

这假定每个idtable_a中都是唯一的。这就是您的查询设置方式。