我正在编写程序...... 我在这个过程中有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,即使表中不存在参数并且存在其他参数的副本并且它将计数两次。如何排除这种情况,检查所有参数是否存在
答案 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);
这假定每个id
在table_a
中都是唯一的。这就是您的查询设置方式。