2012-05-17 49 views
-1

我在下面有兩組結果集。在沒有連接或聯合的情況下在mysql中連接兩個結果集

SELECT * FROM `mfw_host` 
WHERE host_id IN 
(SELECT host_id FROM `latest_tech` 
WHERE `nav_node_id` = 213) 



SELECT * FROM `mfw_navnode` 
WHERE host_id IN 
(SELECT host_id FROM mfw_host 
WHERE host_id IN (SELECT host_id FROM `latest_tech` 
WHERE `nav_node_id` = 213)) 

我是加入兩個結果together..without加入和工會什麼(因爲他們有連接them..and領域按鍵沒有對每一組不同的結果)。

我該如何實現?

UPDATE:.... ANSWER修訂見上文..

我想從兩組添加上述結果together..they返回5行,每行,並且具有不同的列號檢索的每個

試了一個解決辦法:

SELECT 
    a.* 
    , b.* 
FROM 
    (SELECT * FROM `mfw_host` 
WHERE host_id IN 
(SELECT host_id FROM `latest_tech` 
WHERE `nav_node_id` = 213) 
) AS a 
    CROSS JOIN 
    (SELECT * FROM `mfw_navnode` 
WHERE host_id IN 
(SELECT host_id FROM mfw_host 
WHERE host_id IN (SELECT host_id FROM `latest_tech` 
WHERE `nav_node_id` = 213)) 
) AS b 

這種交叉連接返回太多行

+0

如果這些字段對於每組結果都不相同,並且沒有連接它們的鍵,那麼您不能?除了PHP方面。 –

+0

每個查詢返回多少行? –

+0

大約4..each .... –

回答

2

您可以爲其他查詢中不存在的字段獲取一些默認值。假設在mfw_host中有字段:id,hostname,ip;在mfw_navnode中你有id,name,create_date。然後您的查詢可能是

SELECT 0 AS type, id, host_name, ip, '' AS node_name, 
    NULL AS create_date FROM mfw_host 
WHERE host_id IN (
    SELECT host_id FROM `latest_tech` WHERE `nav_node_id` = 213) 
UNION 
SELECT 1 AS type, id, '' AS host_name, NULL AS ip, node_name, create_date 
    FROM `mfw_navnode` WHERE `parent_id`=213 

類型是讓你知道哪個表是哪一行。但沒有必要。

+0

ummm ..所以我可以定義一些不存在於其他表中的默認值...它會檢索到空結果嗎?在結果集....我想它會..所以我認爲你的解決方案可能是正確的...雖然非常間接..我可能會嘗試它。雖然可能有更好的解決方案 –

相關問題