2012-03-19 133 views
2

我有一個名爲mapunit的表,其中有一列叫做muname,主鍵叫做mukeySQL:查詢兩個表

我有另一個表SpatialJoin,它也有主鍵爲mukey。對於SpatialJoin中的每一行,我想檢索相應的muname

我想:

SELECT muname 
FROM mapunit 
WHERE EXISTS (SELECT mukey FROM SpatialJoin) 

,但沒有奏效。對於我如何重寫我的聲明有任何建議,將不勝感激。謝謝!

回答

0

試試這個:

SELECT 
    mu.MuName, mu.mukey 
FROM 
    SpatialJoin sj 
INNER JOIN 
    Mapunit mu ON sj.mukey = mu.mukey 

INNER JOIN將「加入」所定義的兩個表連接條件,現在你可以在你的SELECT選擇兩個表中的列。 INNER JOIN也只連接兩個表中具有該公共列的行(以及該公共列中的相同值)。

更新:從第三Component表中獲取CompName,試試這個:

SELECT 
    mu.MuName, mu.mukey, c.CompName 
FROM 
    SpatialJoin sj 
INNER JOIN 
    Mapunit mu ON sj.mukey = mu.mukey 
INNER JOIN 
    Component c ON sj.mukey = c.mukey 
+0

感謝您的幫助!但是現在我試圖從另一個名爲Component的表中檢索一個名爲compname的列。 Component表具有mukey作爲相對鍵,並且存在一對多關係。我如何需要更改代碼以檢索SpatialJoin中每行的計算機名稱? – 2012-03-19 09:13:36

+0

@HelloWorld_PyNoob:更新了我的回覆 – 2012-03-19 09:15:01

0
​​
+3

我建議使用適當的** ANSI標準JOIN語法**('INNER JOIN ....'等),而不是以逗號分隔的方式在表格後列出表格。 ANSI語法更簡潔,並且由於缺少JOIN條件而傾向於生成更少的不需要的笛卡爾積,並且它保持WHERE條件更清晰(因爲JOIN條件是它們所屬的位置 - 在JOIN語句本身上) – 2012-03-19 08:21:03

0

試試這個:

SELECT b.muname 
FROM SpatialJoin a INNER JOIN mapunit b 
     on a.mukey = b.mukey 
1

你從mapunit採摘的所有行其中密鑰存在於SpatialJoin,不完全是你想要的。

嘗試選擇每一行從SpatialJoin來代替,而只是mapunit加入得到的名稱;

SELECT muname 
FROM SpatialJoin sj 
JOIN mapunit mu ON mu.mukey = sj.mukey 
0
SELECT muname 
FROM SpatialJoin s 
JOIN mapunit m ON m.mukey = s.mukey 

試試這個可能工作

+0

如果您發佈代碼, XML或數據樣本,**請在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」)以精確地格式化和語法突出顯示它! – 2012-03-19 08:49:11

+0

我使用的是StackOverFlow Mobile Site – 2012-03-19 09:05:26

+1

然後用四個空格縮進你的代碼行以得到相同的結果 – 2012-03-19 09:05:44