为了方便起见,我已经重新格式化了原始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更容易使用。)
你想完成什么?该查询并非真正有用,或者看起来如此。 –