表:用戶
| id | compId |
|---|---|
| 1 | comp1 |
表格。公司
| id | 姓名 |
|---|---|
| comp1 | comp2 |
需要一個MYSQL查詢,當傳遞一個公司ID時,它應該只在有一個或多個用戶的情況下獲取公司記錄。我將在公司表上有其他where條件。
這可以通過連接來實作嗎?
示例 1: query(comp1) result: coke (at least one user exists)
例子2:查詢(comp2)結果:沒有記錄(因為不存在屬于comp2公司的用戶)
。uj5u.com熱心網友回復:
你所要求的被稱為semi-join。如果user中有一條或多條匹配的記錄,這將從company中回傳一條記錄。
如果你使用正則連接:
SELECT c. * FROM company c JOIN user u on u. compid = c.id。
這確實回傳了公司的行,但你可能不喜歡它回傳一個行每個用戶。也就是說,結果中的行被乘以匹配的數量。
對此有幾種可能的修復方法,以將結果減少到每家公司的一條記錄。
SELECT DISTINCT c。 * FROM company c JOIN user u on u. compid = c.id。
SELECT c. * FROM company c JOIN (SELECT DISTINCT compid FROM user) u ON u. compid = c.id。
SELECT * FROM company c WHERE c. id IN (SELECT compid FROM user)。
SELECT * FROM company c WHERE EXISTS (SELECT * FROM user WHERE compid = c。 id)。)
哪種方法最適合你的應用程式取決于許多因素,如表的大小、查詢中的其他條件等。我將讓你根據你的具體需要來評估它們。
uj5u.com熱心網友回復:
也許這太簡單了,但是使用行內將滿足你的這個標準
select *
from user u
,公司c
where u.compId = c.id
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/333991.html
標籤:
上一篇:[人工智能-深度學習-35]:卷積神經網路CNN - 常見分類網路- GoogLeNet Incepetion網路架構分析與詳解
