2012-01-27 40 views
0

我正在尝试执行一个php sql查询,其中我的对象的user_id不在另一个数据库表中。这里是我现在的查询:选择另一个表中不存在的变量

SELECT * FROM table1 WHERE user_id='$show_id' ORDER BY id DESC LIMIT 0, 10 

在里面,我检查它是否在我的其他表。它只会在表中不存在的情况下回显。问题是,它是不是会在限制中显示满10。

所以我的想法是创建一个sql查询,以查看它是否存在于其他数据库表中。

在我过去,我只做了简单的sql查询(如上所示),并没有多少多表的查询以及查询内查询。请帮忙!

+0

user_id列发生听起来像一个伟大的地方,RIGHT JOIN。 – Tim 2012-01-27 23:50:06

+0

如果您在问题中提供表格模式,人们将能够提供具体的示例。 – jcmeloni 2012-01-27 23:51:08

+0

对不起,我的问题没有这么具体。挖掘并简化我的代码将很困难!然而,我确实得到了很多帮助我的巨大回答!感谢大家的意见! – iosfreak 2012-01-28 00:00:41

回答

2

可以使用NOT EXISTS操作:

SELECT * 
FROM table1 AS t 
WHERE user_id='$show_id' 
    AND NOT EXISTS 
     (SELECT * 
     FROM OtherTable AS ot 
     WHERE ot.user_id = t.user_id 
    ) 
ORDER BY id DESC 
LIMIT 0, 10 
1

我不知道,但它听起来像你正在寻找NOT EXISTS子查询:

SELECT * FROM table1 
WHERE NOT EXISTS (select id from othertable where id = user_id) AND user_id='$show_id' 
ORDER BY id DESC LIMIT 0, 10 
2

您可以在一个查询做到这一点:

SELECT * 
FROM first_table 
WHERE user_id NOT IN (
    SELECT user_id 
    FROM second_table 
) 

这将从获得所有记录0其中user_id不会在second_table

2
SELECT * 
    FROM table1 t1 
     LEFT OUTER JOIN table2 t2 on t2.user_id = t1.user_id 
WHERE t1.user_id = '$show_id' 
    AND t2.user_id IS NULL 
ORDER BY id DESC 
+0

对于sql初学者而言,不存在方式比联接子句和空检查方式更直观。 – 2012-01-27 23:54:30

+1

LEFT OUTER JOIN是一种优雅的方式!它更好地学习更好的方式,如果你是一个初学者:) – Akhil 2012-01-27 23:55:52

+0

“不存在”和“不在”更简单和容易理解。优雅更接近简单。并且有时'不存在'表现得比'LEFT JOIN + IS NULL'更胖' – 2012-01-28 00:07:20