2016-07-30 47 views
0

試圖從名爲tblTooling的單個表中提取數據,其中兩個TlPartNo數字等於不同的值,並且這些TlPartNo的TlToolNo不相等。這是一個Access數據庫,下面的語句使我接近,但仍然給出了太多的數據。自引用查詢並非等於

SELECT DISTINCT 
    tblTooling.TlToolNo, 
    tblTooling.TlPartNo, 
    tblTooling.TlOP, 
    tblTooling.TlQuantity 
FROM tblTooling, tblTooling AS tblTooling_1 
WHERE (((tblTooling.TlToolNo)<>tblTooling_1.TlToolNo) 
AND ((tblTooling.TlPartNo)="10290722") 
AND ((tblTooling_1.TlPartNo)="10295379")); 

包含的圖像具有tblTooling結構和數據。加上查詢的預期結果。 image

回答

0

你似乎要等到它與兩個PARTNO值時排除ToolNo值。在這種情況下,您可以通過工具編號對中間結果進行分組,並查看在這樣的組中是否僅存在一個PartNo(與having)。在這種情況下,保持這一紀錄,並在外部查詢,得到其他兩種列添加到它:

SELECT DISTINCT 
      tblTooling.TlToolNo, 
      tblTooling.TlPartNo, 
      tblTooling.TlOP, 
      tblTooling.TlQuantity 
FROM  tblTooling 
INNER JOIN (
      SELECT TlToolNo, 
         Min(TlPartNo) AS MinTlPartNo, 
         Max(TlPartNo) AS MaxTlPartNo 
      FROM  tblTooling 
      WHERE  TlPartNo IN ("10290722", "10295379") 
      GROUP BY TlToolNo 
      HAVING Min(TlPartNo) = Max(TlPartNo) 
      ) AS grp 
     ON grp.TlToolNo = tblTooling.TlToolNo 
     AND grp.MinTlPartNo = tblTooling.TlPartNo 

注意你的樣本數據,這將返回4行:

TlToolNo | TlPartNo | TlOP | TlQuantity 
----------+----------+------+----------- 
T00| 10290722 | OP10 | 2 
T00012456 | 10290722 | OP10 | 1 
T00013456 | 10290722 | OP20 | 1 
T00014348 | 10295379 | OP20 | 1 
+0

在「HAVING Count(Distinct TlPartNo)= 1」中獲取缺失的操作員錯誤消息。我一直無法解決這個錯誤。 – stevet

+0

事實證明MS Access不支持該子句,儘管它根據SQL標準是有效的。但是,您可以使用另一個「GROUP BY ... HAVING ...」變體的輸出。看到我更新的答案。 – trincot

0

我想你可以用not exists做到這一點:

select t.* 
from tblTooling as t 
where not exists (select 1 
        from tblTooling as t2 
        where t2.TlPartNo in ("10290722", "10295379") and 
         t2.TlToolNo = t.TlToolNo and 
         t2.tiid <> t.tiid 
       ) and 
     t.TlPartNo in ("10290722", "10295379"); 

這節省了select distinct,這應該是一個性能提升。

+0

即使嘗試了很多調整之後,該聲明也沒有提供任何數據。 – stevet

+0

@stevet。 。 。我不明白爲什麼它不起作用。你可以設置一個SQL小提琴嗎? –