根据列值选择另一行
问题描述:
如果我有下面的查询选择论坛板,但board
表包含列mirror_board_id
。我可以修改一个基本的选择查询,如果mirror_board_id > 0
它会SELECT * FROM board WHERE board_id = mirror_board_id
什么的。目前我使用2个查询来做到这一点,但是这是一个有点查询密集型...根据列值选择另一行
SELECT * FROM board WHERE category_id = 7 AND board_id = 0
更新
SELECT * FROM board WHERE category_id = 7 AND
(
(
mirror_board_id > 0
AND board_id = mirror_board_id
)
OR board_id = 0
) AND
display = 1 ORDER BY `order` ASC
这回错了板在列表中,它实际上不是返回镜板,但原板,其中mirror_board_id > 0
答
从逻辑上讲,它是:
SELECT *
FROM board
WHERE (mirror_board_id > 0 and board_id = mirror_board_id)
or board_id = 0
这可以更简洁地写为:
SELECT *
FROM board
WHERE board_id = coalesce(mirror_board_id, 0)
我可以申请索引与此有关加快步伐?索引'board_id'和'mirror_board_id'分开就够了吗? – Webnet 2010-11-10 16:23:34
由于您正在检查每一行,因此在这种情况下索引是否会有所帮助并不明确。测试并看到... – RedFilter 2010-11-10 16:36:42
它实际上不工作,因为我认为它应该... – Webnet 2010-11-11 01:33:06