SELECT mem.name,
mem.regdate,
stat.level
FROM stats AS stat
INNER JOIN members AS mem
WHERE stat.id = mem.id
AND mem.ref = {$members['id']}
stats
和members
表在id
上有索引。但是当我运行查询时,它检查stats
表中的所有行(在members
表中它只需要一个)。我有什么想法我做错了吗?感谢。
答案 0 :(得分:3)
使用正确的ANSI-92 JOIN语法 - 在ON子句中指定JOIN条件:
SELECT mem.name,
mem.regdate,
stat.level
FROM stats AS stat
JOIN members AS mem ON mem.id = stat.id
WHERE mem.ref = {$members['id']}
如果没有JOIN标准,MySQL将返回一个笛卡尔积,然后将WHERE子句应用于这些结果。几乎任何其他数据库都会告诉您,您提供的查询存在语法错误。
此外,INNER
关键字是可选的。
答案 1 :(得分:0)
尝试从主表中选择(在本例中为成员,我是persume)和JOIN with stats以获取更多信息。使用ON定义统计信息如何连接到成员,并使用WHERE限制成员表的结果。
SELECT mem.name, mem.regdate, stat.level
FROM members AS mem
INNER JOIN stats AS stat
ON stat.id = mem.id
WHERE mem.ref = {$members['id']}
因为它是一个INNER JOIN你也可以转过来(从统计数据中选择,加入成员),但是如果你看某个成员,这可能更有意义。