1

LEFT JOIN と INNER JOIN を組み合わせて既存のクエリに追加する際に問題が発生します。

2 つのメイン テーブルがあります。私の写真の検索可能なすべてのデータを含む「photoSearch」と、私の写真のすべてのデータを含む「写真」。「photoSearch」の 3 つのフィールドで FULLTEXT を使用して関連する写真 ID を取得し、著作権、サイズ、寸法などの「写真」テーブルからデータを取得しています...

これは私のクエリです:

SELECT p.photoID, p.setID, p.headline, p.caption, p.height, p.width, p.size, p.copyright
FROM photos AS p,
      (SELECT photoID FROM photoSearch WHERE MATCH (allPeople, allKeywords, shortCaption)
      AGAINST ('+byline' IN BOOLEAN MODE) LIMIT 0,50) AS photoIDs
WHERE p.photoID = photoIDs.photoID;

次に、このクエリを変更して、各写真に表示されている人物の名前を取得し、画面に印刷するための LEFT JOIN と INNER JOIN を含める必要があります。一部の写真には人物が写っていないため、LEFT JOIN が必要です。このデータは 2 つのテーブルにまたがっています (正規化されています)。「photoPeople」と「people」なので、この結合を思いつきました:

My Join (上記のクエリに追加する必要があります)

LEFT JOIN ( photoPeople AS pp INNER JOIN people AS pe ON pp.peopleID = pe.PeopleID)
ON p.photoID = pp.photoID

しかし、サブ選択クエリがコンマ区切りの FROM リストにあるため、元のクエリに合わせるのが難しいと感じています。混乱しています。また、参加すべきではない場所に参加することで、FULLTEXT インデックスのパフォーマンスに影響を与えないようにしたいと考えています。

副選択の直後 (WHERE の前) に追加しようとしましたが、列 p.photoID を認識しないという SQL エラーが発生していました。

元のクエリと DB 設計は私のものではありません。

どんな助けや指導もありがたく受け取られます。

4

2 に答える 2

4
SELECT 
    p.photoID, 
    p.setID, 
    p.headline, 
    p.caption, 
    p.height, 
    p.width, 
    p.size, 
    p.copyright,
    pe.*
FROM 
    photos p
INNER JOIN
    (
        SELECT photoID 
        FROM photoSearch 
        WHERE MATCH (allPeople, allKeywords, shortCaption) AGAINST ('+byline' IN BOOLEAN MODE) 
        LIMIT 50
    ) pids ON p.photoID = pids.photoID
LEFT JOIN
    photoPeople pp ON p.photoID = pp.photoID
LEFT JOIN
    people pe ON pp.peopleID = pe.peopleID

INNER JOINpeopleテーブルが必要だとLEFT JOINは思わLEFT JOINない。NULLpeopleNULL

于 2012-07-09T01:17:36.113 に答える
0
LEFT JOIN 
  ( SELECT pp.photoID,name FROM photoPeople AS pp INNER JOIN people AS pe 
    ON pp.peopleID = pe.PeopleID) aa
ON p.photoID = aa.photoID
于 2012-07-09T01:11:59.160 に答える