1

tblProjectstblPrCatは、両方のテーブルでt1_id-columns に リンクされています。は、両方のテーブルで-columns にtblCategoriesリンクされています。プロジェクトには複数のカテゴリがある場合があります。tblPrCatt3_id

tblProjects
t1_id
t1_name

tblPrCat
t1_id
t3_id

tblCategories
t3_id
t3_name

SELECTプロジェクト (または 10) の値を取得し、各プロジェクトに対応するカテゴリのすべての名前を取得するために、単一の文を使用しようとしています。

SELECTこれは、プロジェクトごとに 1 つの行を返すが複数のカテゴリを返す 1つの文で可能ですか?

4

3 に答える 3

3

次のようなクエリを試すことができます。

SELECT
    tblProjects.name AS project,
    tblCategories.name AS category
FROM
    tblProjects
    INNER JOIN tblPrCat USING (t1_id)
    INNER JOIN tblCategories USING (t3_id)
WHERE
    /* Your search criteria here */

注: 各プロジェクトに関連付けられたすべてのカテゴリ名が表示されますが、プロジェクトごとに複数のカテゴリがある場合は、プロジェクト名が重複しているように見えます。コードでこれに対処する準備をしてください。

編集: すべてのプロジェクトには少なくとも1つのカテゴリがあると(おそらく間違って)想定していました。なしのプロジェクト名も表示されるようにするには、代わりにこれを使用します。

SELECT
    tblProjects.name AS project,
    IFNULL(tblCategories.name, 'No categories!') AS category
FROM
    tblProjects
    LEFT JOIN tblPrCat USING (t1_id)
    LEFT JOIN tblCategories USING (t3_id)
WHERE
    /* Your search criteria here */

編集: 各プロジェクトを 1 回だけ表示するが、カテゴリ名の概要をカンマ区切りのリストとして表示するには、次を使用します。

SELECT
    tblProjects.name AS project,
    IFNULL(GROUP_CONCAT(tblCategories.name), 'No categories!') AS category
FROM
    tblProjects
    LEFT JOIN tblPrCat USING (t1_id)
    LEFT JOIN tblCategories USING (t3_id)
WHERE
    /* Your search criteria here */
GROUP BY
    tblProjects.t1_id
于 2012-12-05T01:54:21.450 に答える
2

結合を使用できます。

SELECT p.t1_name, c.name
FROM tblProjects p
LEFT JOIN tblPrCat prc ON (p.t1_id = prc.t1_id)
LEFT JOIN tblCategories c ON (c.t3_id = prc.t3_id)

これにより、プロジェクトが複数回リストされることに注意してください。いえ

Project1    Cat1
Project1    Cat2
Project2    Cat1

または、各プロジェクトを 1 回だけ表示する場合は、Group Concat を使用できます。

SELECT p.t1_name, GROUP_CONCAT(c.name)
FROM tblProjects p
LEFT JOIN tblPrCat prc ON (p.t1_id = prc.t1_id)
LEFT JOIN tblCategories c ON (c.t3_id = prc.t3_id)
GROUP BY p.t1_id

どちらが生成されますか:

Project1    Cat1, Cat2
Project2    Cat1
于 2012-12-05T01:55:29.800 に答える
1
SELECT * FROM 
    tblProjects p , 
    tblPrCat pc ,
    tblCategories c
WHERE
    c.t3_id = pc.t3_id
AND
    p.t1_id = pc.t1_id
AND
    p.t1_id = '1'
于 2012-12-05T01:52:58.837 に答える