質問
私は三つのテーブル 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.id
や group_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は同等も使用します。