1

MySQL を使用して、次の 2 つのクエリの INTERSECTion を作成したいと思います。

1) SELECT atn_nid, atn_select_flag, atn_image_name
FROM city, attraction WHERE cty_nid = atn_cty_nid AND cty_nid = 5;

2) SELECT atn_nid, s2a_image_select_flag, atn_image_name 
FROM segment, seg2atn, attraction WHERE seg_nid = s2a_seg_nid AND
s2a_atn_nid = atn_nid and seg_nid = 68 AND
s2a_image_select_flag = true;  

注: クエリ 1 の atn_select_flag と s2a_image_select_flag はどちらもブール値です

何らかの理由で MYSQL は INTERSECT をサポートしていないため、これを達成するために使用する構文について途方に暮れています。どんな助けでも感謝します。

4

1 に答える 1

0

私が正しく仮定すると:

  • atn_...、 、 、という名前のフィールドは、それぞれ、cty_...、、seg_...s2a_...属します。attractioncitysegmentseg2atn
  • 名前が付けられたフィールド..._nidは主キーです。
  • atn_cty_nids2a_seg_nidなどは外部キーです。

最初のクエリはこれと同等です。

SELECT atn_nid, atn_select_flag, atn_image_name
  FROM attraction
 WHERE aty_cty_nid = 5
;

2番目のクエリはこれと同等です:

SELECT atn_nid, TRUE, atn_image_name
  FROM attraction
 WHERE atn_id IN
        ( SELECT s2a_atn_nid
            FROM seg2atn
           WHERE s2a_seg_nid = 68
             AND s2a_image_select_flag = TRUE
        )
;

したがって、それらの交差点は次のとおりです。

SELECT atn_nid, TRUE AS atn_select_flag, atn_image_name
  FROM attraction
 WHERE atn_cty_nid = 5
   AND atn_nid IN
        ( SELECT s2a_atn_nid
            FROM seg2atn
           WHERE s2a_seg_nid = 68
             AND s2a_image_select_flag = TRUE
        )
;

そして(追加するために編集された)それらの結合はこれです:

SELECT atn_nid, atn_select_flag, atn_image_name
  FROM attraction
 WHERE aty_cty_nid = 5
UNION
SELECT atn_nid, TRUE, atn_image_name
  FROM attraction
 WHERE atn_id IN
        ( SELECT s2a_atn_nid
            FROM seg2atn
           WHERE s2a_seg_nid = 68
             AND s2a_image_select_flag = TRUE
        )
;
于 2012-10-22T15:45:08.393 に答える