MySQL WHERE statement with cross table comparisons
The MySQL statement below gives me three times the same result because I need to select all the data from the different tables to do the comparisons. How can I tell MySQL that I only need one of those entries?
SELECT watchedItem开发者_如何学JAVAs.id FROM watchedItems, globalItems, bidGroups
WHERE (watchedItems.bidGroupID IS NULL OR (watchedItems.bidGroupID IS NOT NULL AND bidGroups.bidGroupQty > 0))
AND watchedItems.aid = globalItems.aid
AND watchedItems.maxPrice > globalItems.currentPrice
Output:
ID
2
2
2
SELECT distinct(watchedItems.id) FROM ...
http://dev.mysql.com/doc/refman/5.0/en/select.html
"DISTINCT specifies removal of duplicate rows from the result set."
You need some joins:
SELECT watchedItems.id
FROM watchedItems
left join globalItems on watchedItems.bidGroupID = bidGroups.bidGroupID
left join bidGroups on watchedItems.aid = globalItems.aid
WHERE (watchedItems.bidGroupID IS NULL OR bidGroups.bidGroupQty > 0)
AND watchedItems.maxPrice > globalItems.currentPrice
You were getting duplicates because there were three rows in the bidGroups table.
精彩评论