1

如果我这样写查询是否很好:-(请参阅where条件中的查询)

SELECT distinct(id) "idea_id" 
FROM ideas 
WHERE deleted_by_user = 0 AND moderation_flag = 1 AND 
user_id in (select id 
            from users 
            where confirm like "yes") 
ORDER BY time_of_creation DESC

让我知道这个查询是否有问题:thanx提前..

4

4 回答 4

0
SELECT distinct i.id "idea_id" 
FROM ideas i join users u
on i.user_id=u.id and u.confirm ='yes'
WHERE i.deleted_by_user = 0 
AND i.moderation_flag = 1 
ORDER BY i.time_of_creation DESC
于 2012-11-06T07:31:02.460 回答
0
SELECT  distinct a.ID idea_id
FROM    ideas a
        INNER JOIN users b
            ON a.user_id = b.id
WHERE   a.deleted_by_user = 0 AND 
        a.moderation_flag = 1 
        b.confirm = 'YES'
ORDER BY time_of_creation DESC
于 2012-11-06T07:31:23.380 回答
0

您可以通过两种方式编写此查询:

SELECT DISTINCT(i.id) "idea_id" 
FROM ideas i 
INNER JOIN users u ON i.user_id = u.id 
WHERE i.deleted_by_user = 0 AND i.moderation_flag = 1 AND u.confirm = 'yes' 
ORDER BY i.time_of_creation DESC;

SELECT DISTINCT(i.id) "idea_id" 
FROM ideas i 
WHERE i.deleted_by_user = 0 AND i.moderation_flag = 1 AND 
EXISTS (SELECT * FROM users u WHERE i.user_id = u.id  AND u.confirm = 'yes')
ORDER BY i.time_of_creation DESC;
于 2012-11-06T07:47:35.783 回答
0

回答您的问题 - 使用子查询没有问题。

另一方面,在以一种或另一种方式编写查询时,您(至少)需要考虑三件不同的事情:

  1. 数据库运行我的查询的效率如何?(如果数据库很小,这可能根本不重要)
  2. 这有多容易制定和编写?- 通常连接到
  3. 对于阅读我的代码的其他人来说,这有多容易理解?(如果我查看一年前编写的代码,我自己可能算作“其他人”......)

如果您的数据库规模很大,效率很重要,那么选择如何制定查询的最佳方法通常是以不同的方式编写它并在数据库上进行测试。(但往往数据库中的查询优化器这么好,没关系)

于 2012-11-06T08:21:25.737 回答