-1

以下に 2 つの結果セットがあります。

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))

両方の結果を一緒に結合することです.結合と結合なしで(それらを接続するキーがなく、結果のセットごとにフィールドが異なるため)。

どうすればそれを達成できますか?

更新:.... 回答が更新されました 上記を参照してください..

上記の結果を 2 つのセットから一緒に追加したい..それぞれ 5 行を返し、それぞれ異なる列番号を取得する

1つの解決策を試しました:

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

このクロス結合で返される行が多すぎます

4

1 に答える 1

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

タイプは、どのテーブルからどの行であるかを知ることができるようにするためのものです。しかし、それは必要ではありません。

于 2012-05-17T07:06:27.230 に答える