爲了方便起見,我已經重新格式化了原始SQL語句以使其人類可讀。
SELECT a.id AS a_id
, a.info AS a_info
, b.id AS b_id
, b.info AS b_info
FROM stats a
JOIN stats b
ON a.id != b.id
LIMIT 25
您當前的查詢幾乎返回笛卡爾積。來自統計數據的每一行都與統計數據中的每一行進行匹配,除了匹配自身。 (假設stats.id
是主鍵或唯一鍵。)
要添加一個連接到用戶表,限制行從a
返回,例如:
SELECT a.id AS a_id
, a.info AS a_info
, b.id AS b_id
, b.info AS b_info
FROM stats a
JOIN users au ON au.id = a.user_id AND au.city=1
JOIN stats b ON a.id != b.id
LIMIT 25
如果要限制返回的行兩個a
和b
,再添加入到users
表:
SELECT a.id AS a_id
, a.info AS a_info
, b.id AS b_id
, b.info AS b_info
FROM stats a
JOIN users au ON au.id = a.user_id AND au.city=1
JOIN stats b ON a.id != b.id
JOIN users bu ON bu.id = b.user_id AND bu.city=1
LIMIT 25
這是不是爲了實現這一目標的唯一途徑。例如,您可以使用a.user_id IN (subquery)
或謂詞。
(如果您使用可讀的格式進行格式化,SQL更容易使用。)
你想完成什麼?該查詢並非真正有用,或者看起來如此。 –