2012-03-13 80 views
2

我有一個表'node',它有一列'nid'。該ID對應於其他三個表中的「entity_id」列。我們將稱之爲「流行」,「城市」,「國家」這三個表格。 「城市」和「州」表分別具有city_value和state_value列。根據來自三個對應表的數據刪除id表中的行

並非所有'城市'和'州'錶行在'流行'表中都有相應的'entity_id'。

從這我可以得到兩組數據。在pop表(setA)中具有和entity_id的節點和不在(setB)中的節點。

要獲得組A我這樣做:

SELECT nid FROM node 
    LEFT OUTER JOIN pop 
    ON node.nid = pop.entity_id 
    WHERE pop.entity_id IS NOT null 

我無法弄清楚如何在「節點」從具有相同州和城市爲組A組B刪除行。

編輯:我在我的setA代碼m.entity_id,但它應該已經在WHERE行pop.entity_id。

編輯:我想我有它。

SELECT DISTINCT setB.nid FROM 

(
    SELECT DISTINCT AA.nid, AA.title, BB.field_dialup_number_city_value, CC.field_dialup_number_state_value FROM 
    ( 
     SELECT node.nid, node.title FROM node LEFT OUTER JOIN field_data_field_dialup_number_popcode pop 
     ON node.nid = pop.entity_id WHERE pop.entity_id IS NOT null 
    ) AA 
    INNER JOIN field_data_field_dialup_number_city BB ON AA.nid = BB.entity_id 
    INNER JOIN field_data_field_dialup_number_state CC ON AA.nid = CC.entity_id 
) setB 


INNER JOIN 
(
    SELECT DISTINCT A.nid, A.title, B.field_dialup_number_city_value, C.field_dialup_number_state_value FROM 
    ( 
     SELECT node.nid, node.title FROM node LEFT OUTER JOIN field_data_field_dialup_number_popcode pop 
     ON node.nid = pop.entity_id WHERE pop.entity_id IS null 
    ) A 
    INNER JOIN field_data_field_dialup_number_city B ON A.nid = B.entity_id 
    INNER JOIN field_data_field_dialup_number_state C ON A.nid = C.entity_id 
) setA 


ON setA.field_dialup_number_state_value = setB.field_dialup_number_state_value 

WHERE setA.field_dialup_number_city_value = setB.field_dialup_number_city_value 

回答

1

你說組A是

SELECT nid FROM node 
LEFT OUTER JOIN pop 
ON node.nid = pop.entity_id 
WHERE m.entity_id IS NOT null 

組B將只是一個JOIN WHERE NULL

SELECT nid FROM node 
LEFT OUTER JOIN pop 
ON node.nid = pop.entity_id 
WHERE m.entity_id IS null 

如果你想組A連接回城市和國家,試試這個:

SELECT DISTINCT A.nid FROM 
(
    SELECT nid FROM node LEFT OUTER JOIN pop 
    ON node.nid = pop.entity_id WHERE m.entity_id IS NOT null 
) A 
INNER JOIN city B ON A.nid = B.entity_id 
INNER JOIN state C ON A.nid = C.entity_id 
; 

如果你想讓setB連接CT回城市和國家,試試這個:

SELECT DISTINCT A.nid FROM 
(
    SELECT nid FROM node LEFT OUTER JOIN pop 
    ON node.nid = pop.entity_id WHERE m.entity_id IS null 
) A 
INNER JOIN city B ON A.nid = B.entity_id 
INNER JOIN state C ON A.nid = C.entity_id 
; 
+0

我只想從「節點」當兩個組A和組B的州和城市的比賽,因爲我上面所解釋刪除行。你的第一個代碼塊會完全刪除setB。 – 2012-03-13 20:00:55

+0

這是我陷入困境的地方。然後,我需要從** setB **中獲取城市和州,並且如果在** setA **中存在相同的城市和州組合,我將刪除與** setB **相對應的'node.nid' 'entity_id' – 2012-03-13 22:26:21

+0

不應該存在城市,州和pop中的node.nid作爲entity_id嗎? – RolandoMySQLDBA 2012-03-13 22:52:14