2012-10-04 132 views
1

我有两个表,table1table2。他们都有相同的列,program_id,scheduled_timetimezone_idSQL - 比较两个表

我想检索具有相同的program_idtimezone_id但与table1不同的scheduled_time的行。

所以这里是我试过SQL:

select t1.* 
from table1 t1, table2 t2 
where t1.program_id = t2.program_id 
    and t1.timezone_id = t2.timezone_id 
    and t1.scheduled_time != t2.scheduled_time; 

但我仍然看到有相同program_idscheduled_timetimezone_id行。

有人能解决这个SQL?

谢谢。

+2

您正在使用什么数据库管理系统? –

+3

这真的是你尝试过的SQL吗?因为它似乎永远不会定义't1'。 。 。 – ruakh

+5

看到(和** **拥抱!)[坏习惯踢:使用旧样式的JOIN(http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to- )使用老的风格,joins.aspx踢 - 使用** **正确的ANSI/ISO JOIN语法 –

回答

2

尝试是这样的:

SELECT 
    t1.* 
FROM 
    table1 t1 
INNER JOIN 
    table2 t2 ON t1.program_id = t2.program_id AND t1.timezone_id = t2.timezone_id 
WHERE 
    t1.scheduled_time <> t2.scheduled_time 

基本上,做共同列的INNER JOINprogram_idtimezone_id),并确保scheduled_time列有一个不同的价值。

另外:在SQL使用<>运营商 - !=是C#/ VB.NET ....

+0

我仍然可以看到与查询具有相同的program_id,scheduled_time和timezone_id的行。在这一点上,我有点困惑。 – user826323

2

尝试使用子查询:

select t1.* 
from table1 t1 
where exists 
(
    select 1 
    from table2 t2 
    where t1.program_id = t2.program_id 
    and t1.timezone_id = t2.timezone_id 
    and t1.scheduled_time != t2.scheduled_time; 
) 
0

这应该工作。我会建议总是指定一个列列表,而不是使用SELECT *

SELECT t1.program_id, t1.scheduled_time, t1.timezone_id 
FROM table1 t1 
INNER JOIN table2 t2 ON 
    t2.program_id = t1.program_id AND 
    t2.timezone_id = t1.timezone_id 
WHERE 
    t2.scheduled_time <> t1.scheduled_time