0

我在 Oracle 中有两个表

表 A(所有字段都是主键)
-----------------------------------------
西德 (INT)   
星期六 (CHAR)
日期时间(日期时间)
表 B(所有字段都是主键 - 与表 A 相同)
-------------------------------------------------- --------
SID
日
约会时间

我想在表 A 中查找记录

where A.SID = B.SID
AND A.SDAY = B.SDAY
AND A.DATETIME <> B.DATETIME

(即 - 我想在表 A 中查找与表 B 中的对应列匹配的记录,但日期时间除外)

直接 INNER JOIN SQL 没有给我结果。有任何想法吗?

这也不起作用

SELECT A.* FROM TABLE_A A
WHERE  EXISTS (
SELECT 'X' FROM TABLE_B B
WHERE A.SID = B.SID
AND A.SDAY = B.SDAY 
AND A.DATETIME <> B.DATETIME)
4

2 回答 2

0

我可能会将其作为内部连接而不是存在,但我希望你的工作。

SELECT A.* 
FROM TABLE_A A
INNER JOIN TABLE_B B
ON  A.SID = B.SID
AND A.SDAY = B.SDAY 
AND A.DATETIME <> B.DATETIME

如果您仍然没有得到结果,可以尝试发布一些示例数据供我们测试


您可以运行的完整测试以显示上述连接有效:

CREATE TABLE #Table_a
(
    [SID] INT, 
    SDAY CHAR,
    [DATETIME] DATETIME
)

CREATE TABLE #Table_b
(
    [SID] INT, 
    SDAY CHAR,
    [DATETIME] DATETIME
)

INSERT INTO #Table_a
        ( SID, SDAY, DATETIME )
VALUES  ( 0, -- SID - int
          'A', -- SDAY - char
          '2012-12-27 23:00:01'  -- DATETIME - datetime
          )
INSERT INTO #Table_a
        ( SID, SDAY, DATETIME )
VALUES  ( 2, -- SID - int
          'B', -- SDAY - char
          '2012-12-27 23:00:01'  -- DATETIME - datetime
          )
INSERT INTO #Table_a
        ( SID, SDAY, DATETIME )
VALUES  ( 3, -- SID - int
          'C', -- SDAY - char
          '2012-12-27 23:00:01'  -- DATETIME - datetime
          )




INSERT INTO #Table_B
        ( SID, SDAY, DATETIME )
VALUES  ( 0, -- SID - int
          'A', -- SDAY - char
          '2012-12-27 3:00:01'  -- DATETIME - datetime
          )
INSERT INTO #Table_B
        ( SID, SDAY, DATETIME )
VALUES  ( 2, -- SID - int
          'B', -- SDAY - char
          '2012-12-27 3:00:01'  -- DATETIME - datetime
          )
INSERT INTO #Table_B
        ( SID, SDAY, DATETIME )
VALUES  ( 3, -- SID - int
          'C', -- SDAY - char
          '2012-12-27 23:00:01'  -- DATETIME - datetime
          )


SELECT A.* 
FROM #TABLE_A A
INNER JOIN #TABLE_B B
ON  A.SID = B.SID
AND A.SDAY = B.SDAY 
AND A.DATETIME <> B.DATETIME


DROP TABLE #Table_a
DROP TABLE #Table_b
于 2012-12-27T22:58:33.193 回答
0

如果您显示这样的表定义,您的问题可能会更容易阅读:

-- 我在 Oracle 中有两张表

CREATE TABLE TABLE_A -- BTW: why the caps?
  ( SID INTEGER NOT NULL
  , SDAY CHAR NOT NULL
  , ZDATETIME DATETIME NOT NULL -- note: using a typename as an identier
                                -- will break things.
  , PRIMARY KEY (SID,SDAY,ZDATETIME)
  );

CREATE TABLE TABLE_B -- all (1)fields are primary keys
   ( SID SDAY DATETIME NOT NULL PRIMARY KEY
   );

[也许这应该是评论,但评论没有格式化的可能性]

(即 - 我想在表 A 中查找与表 B 中相应列匹配的记录

EXISTS

日期时间除外)

NOT EXISTS

好的,现在解决方案:

SELECT A.* FROM TABLE_A A

WHERE  EXISTS (
    SELECT 1 FROM TABLE_B B
    WHERE A.SID = B.SID
    AND A.SDAY = B.SDAY 
    )
AND NOT  EXISTS (
    SELECT 2 FROM TABLE_B B
    WHERE A.SID = B.SID
    AND A.SDAY = B.SDAY 
    AND A.ZDATETIME = B.ZDATETIME
    )
    ;
于 2012-12-27T23:03:30.937 回答