我有一個表稱爲事務用SQL查詢
Transaction:
User_Id: int
Transaction_Type: int
Amount: int
我多麼查詢沒有交易類型1.
SELECT * FROM Transaction WHERE Transaction_Type <> 1 Group By User_Id
所有用戶彷彿回到所有用戶掙扎&他們的交易類型不= = 1.我需要所有缺少/沒有1類記錄的用戶。
我有一個表稱爲事務用SQL查詢
Transaction:
User_Id: int
Transaction_Type: int
Amount: int
我多麼查詢沒有交易類型1.
SELECT * FROM Transaction WHERE Transaction_Type <> 1 Group By User_Id
所有用戶彷彿回到所有用戶掙扎&他們的交易類型不= = 1.我需要所有缺少/沒有1類記錄的用戶。
這可以通過IN()
子查詢
SELECT DISTINCT User_Id FROM Transaction
WHERE User_Id NOT IN (SELECT DISTINCT User_Id FROM Transaction WHERE Transaction_Type = 1)
或者用NOT EXISTS
SELECT
DISTINCT User_Id
FROM Transaction t
WHERE
NOT EXISTS (SELECT User_Id FROM Transaction tn WHERE Transaction_Type = 1)
AND t.User_Id = tn.User_Id
有可能這樣做的更優雅的方式,但這應該工作:
SELECT * FROM Transaction WHERE User_Id NOT IN (SELECT User_Id FROM Transaction WHERE Transaction_Type = 1)
SELECT DISTINCT User_Id
FROM Transaction
WHERE Transaction_Id <> 1
GROUP BY User_Id
這得到它在每個User_Id
至少有一個不屬於類型1的交易。如果您還想要沒有交易的交易,請添加OR Transaction_Id IS NULL
至WHERE
聲明。
SELECT *
FROM (SELECT DISTINCT User_Id FROM Transaction) AS User
LEFT JOIN Transaction ON Transaction.User_Id = User.id
AND Transaction.Transaction_Id != 1
WHERE Transaction.Transaction_Id IS NULL
GROUP BY User.id
例如
SELECT DISTINCT User_Id
FROM [Transaction]
EXCEPT
SELECT User_Id
FROM [Transaction]
WHERE Transaction_Id = 1
那如果你沒有爲用戶提供單獨的表的。如果你這樣做,那麼使用外連接。
我不會使用關鍵字(如Transaction
)爲表/列名
我會用JOIN
做到這一點建議。假設Users
表:
SELECT u.*
FROM Users u
LEFT JOIN Transaction t
ON t.User_ID = u.User_ID
AND t.Transaction_Type = 1
WHERE t.User_ID IS NULL
這種方法避免了子查詢和DISTINCT
。
+1加速8秒。 – 2012-02-13 19:41:00
@AnthonyGrist和+1爲你只是想念它。 – 2012-02-13 19:42:31