需要替代两个左连接
嘿家伙快速的问题,我总是使用左连接,但是当我离开连接两次时,我总是得到有趣的结果,通常是重复的。我目前正在做一个查询,左连接两次检索所需的必要信息,但我想知道是否有可能建立另一个选择语句,所以我不需要两个左连接或两个查询,或者如果有更好的方法。例如,如果我可以选择table.topic中的topic.creator作为第一个AS,那么我可以在用户中选择该变量,并将连接保留为table.scrusersonline。提前感谢您的任何建议。需要替代两个左连接
SELECT * FROM scrusersonline
LEFT JOIN users ON users.id = scrusersonline.id
LEFT JOIN topic ON users.username = topic.creator
WHERE scrusersonline.topic_id = '$topic_id'
该查询的全部意义在于检查topic.creator是通过网上从table.topic检索他的名字,并在table.users匹配他的身份证,然后检查,如果他是在table.scrusersonline。它不幸地产生了重复的条目,因此在我的脑海中是不准确的。
一种选择是将你加入这样的:
SELECT *
FROM scrusersonline
LEFT JOIN (users ON users.id = scrusersonline.id
JOIN topic ON users.username = topic.creator)
WHERE scrusersonline.topic_id = '$topic_id'
您的连接条件上的嵌套行吗? 'ON users.id = scrusersonline.id'子句应该在括号外,不是吗? – 2010-04-11 02:16:05
尝试:
select * from topic t
left outer join (
users u
inner join scrusersonline o on u.id = o.id
) on t.creator = u.username
如果o.id为空,则用户下线。
无论您想要回数据,都使用LEFT JOIN。在这种情况下,如果创建者处于脱机状态,则不返回行将是一个很好的指示 - 所以删除LEFT连接并仅进行常规连接。
SELECT *
FROM scrusersonline AS o
JOIN users AS u ON u.id = o.id
JOIN topic AS t ON u.username = t.creator
WHERE o.topic_id = '$topic_id'
那岂不是更好地状态移动到连接来匹配topic_id
在topics
表。我认为这将解决您的问题,由于重复来自与topics
表连接:因为你似乎寻找scrusersonline
和users
之间的交叉
顺便说一句,
LEFT JOIN
与users
不需要两个左派是正确的。 – 2010-04-11 01:55:48@Sfaceface,请注意正确格式化您的代码。它使其他人更容易帮助你。 – 2010-04-11 01:57:16
请举一个重复条目的例子。除非有多个记录,否则不应该有多个条目。使用不同可能会解决,除非记录不是真的重复。 – Don 2010-04-11 02:01:43