从两个表中选择行

问题描述:

请任何人都可以帮助我,我对PHP很熟悉,但我不擅长它。请帮助。我有两个表都有id,看样,从两个表中选择行

表1

---------------------------------- 
    **ID** | **NAME**  | **AGE** | 
---------------------------------- 
    001 | john  | 21  | 
---------------------------------- 
    002 | erik  | 18  | 
---------------------------------- 
    003 | ella  | 19  | 
---------------------------------- 
and soon... 

表2

---------------------------------- 
    **ID** | **SUBJECT**  | **GRADE** | 
---------------------------------- 
    001 | math  | 80  | 
---------------------------------- 
    003 | english  | 83  | 
---------------------------------- 
and soon.... 

这里的问题是,我只是想选择从表1的行它的id不匹配在表2中。

我用这个条件,但它不会工作,我希望如此,这意味着这是错误的方式,

if($t1_id!=$t2_id){ 
blah blah blah... 
} 
else 
{ 
all data is match! 
} 

时,表2中的id table1中匹配它已经表明我的data is all match即使只是有table2中的一个条目。

请帮帮我。如果你不知道我如何展示我的问题,请告诉我,谢谢!

+0

尝试此为您查询:'SELECT * FROM表1, table2 where table1.id = table2.id',这个查询只能找到等级为 – 2016-03-07 13:22:46

+0

的用户@MohsenShakibafar你的解决方案只会找到匹配(这不是要求的)。你正在使用一种超过20岁的方法来加入你的表格 –

+0

@ t-clausen.dk你是对的,是的,它的20岁,更好的做法是'加入'只想检查他确切想要的东西:) – 2016-03-07 13:35:14

这两个解决方案将在SQLSERVER工作:

解决方案1:

SELECT 
    t1.ID, t1.NAME, t1.AGE 
FROM 
    table1 t1 
LEFT JOIN 
    table2 t2 
ON t1.ID = t2.ID 
WHERE t2.ID is null 

解决方案2:

SELECT 
    ID, NAME, AGE 
FROM 
    table1 t1 
WHERE NOT EXISTS(SELECT * FROM table2 WHERE t1.ID = ID) 
+0

这太棒了!谢谢你sir t-clausen.dk!解决方案2很棒!非常感谢你.. – Frank

您可以使用exists子句来检查记录是否存在于另一个表中,例如,

select * 
from table1 t1 
where t1.id = ? 
and exists(
select * 
from table2 t2 
where t2.id = t1.id; 
); 
+1

我不认为这是他的意思。 – sagi

+0

谢谢你让我试试这个。 – Frank

+0

我已经解决了我的问题..也感谢你的帮助。 – Frank