我有两个表,一个包含由单个用户创建的数据,并为该数据分配了唯一的主键。我的第二个表包含上述数据的评级,包含创建评级的用户,实际评级以及被评级数据的ID。
表一,[数据] [用户] [data_id]
表二,[评级] [用户] [data_id]
我想要一个查询,根据表2中没有包含任何返回随机行的评级的假设,从表1中给出一个随机行。
我认为这需要加入,但我一直陷入困境。这可以通过一个查询来实现吗?
答案 0 :(得分:2)
我认为应该这样做:
SELECT * FROM tableOne
WHERE (SELECT COUNT(*) FROM tableTwo WHERE tableTwo.data_id = tableOne.data_id) = 0
ORDER BY RAND()
LIMIT 1
答案 1 :(得分:1)
这应该这样做。它可能比执行COUNT
方法快一点,具体取决于您的表:
SELECT *
FROM tableOne t1
LEFT JOIN tableTwo t2
ON t2.user= t1.user
AND t2.data_id = t1.data_id
WHERE t2.user IS NULL
ORDER BY RAND()
LIMIT 1
这假定您的user
列不可为空。