質問

私は三つのテーブル tag, page, pagetag

のデータを以下の

ページ

ID      NAME
1       page 1
2       page 2
3       page 3
4       page 4

タグ

ID      NAME
1       tag 1
2       tag 2
3       tag 3
4       tag 4

pagetag

ID   PAGEID  TAGID
1    2        1
2    2        3
3    3        4
4    1        1
5    1        2
6    1        3

思文字列を含む取引先タグ名は各ページのSQLグを返します。これが私の希望を出力します。

ID      NAME       TAGS
1       page 1     tag 1, tag 2, tag 3
2       page 2     tag 1, tag 3
3       page 3     tag 4
4       page 4    

ができるSQL?


を使用していイナリを使用しています。しかし、このクラスは、データベースのダウンロードが可能です。

役に立ちましたか?

解決

セルジオ-デルAmo:

しかし、私は少なくなってきているのページ無しタグです。思いを書く必要がある私のクエリーと、左側が仲間入り。

SELECT pagetag.id, page.name, group_concat(tag.name)
FROM
(
    page LEFT JOIN pagetag ON page.id = pagetag.pageid
)
LEFT JOIN tag ON pagetag.tagid = tag.id
GROUP BY page.id;

なかのクエリがいたいもの- pagetag.idgroup_concat(tag.name) ます null ページ4の例だ投稿は、上記のページは表示されます。

他のヒント

ヴ行うことができるので、3のようなもの。

SELECT page_tag.id, page.name, group_concat(tags.name)
FROM tag, page, page_tag
WHERE page_tag.page_id = page.page_id AND page_tag.tag_id = tag.id;

れていないテストが行われ、これを書tadでは、より効率的ながんを開始しました!

また、サンプルをベースにプラグインが想定する場合は、所定の手続きが再生できないほどのところで、タクシーと指定!やMySQLな野生の約ハイフンでのフィールドの名前も変えるべき上記の例です。

どう意識SQL92を定義していませんか文字列の連結が必要となります。そしてほとんどのエンジンを独自の方法です。

したい場合はデータベースを独立した方法でいいので外部のデータベースです。

(潜在的に秘すべてがオラクル)

Oracle

SELECT field1 | ', ' | field2
FROM table;

MS SQL

SELECT field1 + ', ' + field2
FROM table;

MySQL

SELECT concat(field1,', ',field2)
FROM table;

PostgeSQL

SELECT field1 || ', ' || field2
FROM table;

また溶液を遊びが仲間入り。の問い合わせ:

SELECT
    page.id AS id,
    page.name AS name,
    tagstable.tags AS tags
FROM page 
LEFT OUTER JOIN 
(
    SELECT pagetag.pageid, GROUP_CONCAT(distinct tag.name) AS tags
    FROM tag INNER JOIN pagetag ON tagid = tag.id
    GROUP BY pagetag.pageid
)
AS tagstable ON tagstable.pageid = page.id
GROUP BY page.id

この出力:

id   name    tags
---------------------------
1    page 1  tag2,tag3,tag1
2    page 2  tag1,tag3
3    page 3  tag4
4    page 4  NULL

できるブクエリの速度で書くことによってもそうです。

pagetag.id group_concat(タグです。名がnullの場合ページ4の例だ投稿は、上記のページは表示されます。

で利用できます COALESCE 機能の削除る場合はNullに必要なもの:

select COALESCE(pagetag.id, '') AS id ...

じていますが、これらの最初のnull以外の値からこのパラメータのリストに追加します

いという思いを大切にしている必要がある複数使えます。

のようなもの(試験は行っておりません):

select ID as 'PageId', Name as 'PageName', null as 'Tags'
into #temp 
from [PageTable]

declare @lastOp int
set @lastOp = 1

while @lastOp > 0
begin
    update p
    set p.tags = isnull(tags + ', ', '' ) + t.[Tagid]
    from #temp p
        inner join [TagTable] t
            on p.[PageId] = t.[PageId]
    where p.tags not like '%' + t.[Tagid] + '%'

    set  @lastOp == @@rowcount
end

select * from #temp

醜いものです。

この例のT-SQLいと思うMySqlは同等も使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top