[英]check all the list of id value available in table mysql query
表
id | catid | productid |
1 3 100
2 244 110
3 400 300
嗨,這是我的查詢,
select catid from table where catid NOT IN ('3','244','5')
我有一張上面的桌子,
1-我需要什么,我必須檢查一些catid值列表,如果所有list catid都可用,則表將返回“ yes”或“ rows”。
2-否則將返回“否”所有列表catid不可用?
這對我的預期結果不正確嗎?
從表中選擇catid,IF(catid IS NOT NULL,“ Yes”,“ No”)from catid IN('3','244','5');
我需要的是,cat id的列表是“(''3','244','5')”,如果一旦缺少該表的值將返回“否”,則該表應該可用
謝謝你的幫助 ?
您可以分多個步驟進行
例如:您需要檢查的實際表
SELECT * FROM emp_old;
+--------+-------+
| emp_no | name |
+--------+-------+
| 1 | abdul |
| 2 | Jp |
| 3 | Ankur |
+--------+-------+
3 rows in set (0.00 sec)
將您的ID插入新表中,您將檢查或傳入IN或NOT IN
DROP TABLE IF EXISTS InsertIds;
CREATE TABLE InsertIds(Id INT);
INSERT INTO InsertIds VALUES(1),(2),(3),(4);
SELECT * FROM InsertIds;
+------+
| Id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
4 rows in set (0.00 sec)
現在嘗試這個
SELECT Id , IF(emp_no IS NOT NULL , "Yes" , "No") AS "Check status" FROM InsertIds a LEFT JOIN emp_old b ON a.Id = b.emp_no ;
+------+--------------+
| Id | Check status |
+------+--------------+
| 1 | Yes |
| 2 | Yes |
| 3 | Yes |
| 4 | No |
+------+--------------+
4 rows in set (0.00 sec)
解決此問題的一種方法是使用left outer join
和聚合:
select (case when count(distinct t.catid) = 3 then 'Yes'
else concat('No, missing ',
group_concat(case when t.catid is null then vals.val end)
)
end)
from (select '3' as val union all '244' union all '5'
) vals left outer join
t
on t.catid = vals.val;
列表本身作為一組行在第一個子查詢中運行,每行一個值。
我認為這里最簡單的解決方案是MySQL和PHP的組合:
假設您的catid值列表不包含重復項:
第1步 -使用PHP獲取列表中所有元素的數量
第2步 -使用MySQL獲取列表中所有元素的不同數量:
select count(distinct catid) from table where catid IN ('3','244','5');
步驟3使用PHP將步驟1中的計數與步驟2中的計數進行比較。如果它們相等,則為“是”,否則為“否”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.