SOに関する最初の質問と重複する可能性のある質問をするために十字架につけられる準備ができていますが、一生見つけることができません。
製品テーブル、リンク テーブル、名前付きの子テーブルの 3 つのテーブルがあります。SQLFiddleにプリロードされています>>まだあなたの注意が必要な場合。
CREATE TABLE Product (iProductID int NOT NULL PRIMARY KEY
, sProductName varchar(50) NOT NULL
, iPartGroupID int NOT NULL)
INSERT INTO Product VALUES
(10001, 'Avionic Tackle', '1'),
(10002, 'Eigenspout', '2'),
(10003, 'Impulse Polycatalyst', '3'),
(10004, 'O-webbing', '2'),
(10005, 'Ultraservo', '3'),
(10006, 'Yttrium Coil', '5')
CREATE TABLE PartGroup (iPartGroupID int NOT NULL
, iChildID int NOT NULL)
INSERT INTO PartGroup VALUES
(1, 1),
(2, 2),
(3, 1),
(3, 2),
(3, 3),
(3, 4),
(4, 5),
(4, 6),
(5, 1)
CREATE TABLE PartNames (iChildID int NOT NULL PRIMARY KEY
, sPartNameText varchar(50) NOT NULL)
INSERT INTO PartNames VALUES
(1, 'Bulbcap Lube'),
(2, 'Chromium Deltaquartz'),
(3, 'Dilation Gyrosphere'),
(4, 'Fliphose'),
(5, 'G-tightener Bypass'),
(6, 'Heisenberg Shuttle')
すべてのパーツ グループ (製品に属している場合と属していない場合があります) を一覧表示し、それらの子の名前を翻訳する方法を見つけようとしています。つまり、リンク テーブルと子名テーブルのみを使用して、リンク テーブルのすべての翻訳済み要素を一覧表示するにはどうすればよいでしょうか。私は孤児を見つけようとしています。
2 つのクエリがあります。
SELECT P.iPartGroupID
,STUFF(
(SELECT
CONCAT(', ', PN.sPartNameText)
FROM PartGroup PG
INNER JOIN PartNames PN ON PN.iChildID = PG.iChildID
WHERE PG.iPartGroupID = P.iPartGroupID
FOR XML PATH(''), TYPE
).value('.', 'VARCHAR(MAX)')
, 1, 2, ''
) AS [Child Elements]
FROM Product P
GROUP BY P.iPartGroupID
これは、製品に属するすべての部品グループとその子要素を名前別にリストします。iPartGroupID = 4 はここにありません。
私も持っています:
SELECT PG.iPartGroupID
,STUFF(
(SELECT
CONCAT(', ', PGList.iChildID)
FROM PartGroup PGList
WHERE PGList.iPartGroupID = PG.iPartGroupID
FOR XML PATH(''), TYPE
).value('.', 'VARCHAR(MAX)')
, 1, 2, ''
) AS [Child Elements]
FROM PartGroup PG
GROUP BY PG.iPartGroupID
これにより、すべてのパーツ グループとその子要素がコード別に一覧表示されます。ここでは iPartGroupID = 4 について説明しますが、名前は翻訳されていません。
孤立したパーツ グループ (および孤立したパーツ) を一覧表示するために使用できるクエリは次のとおりです。
4 G-tightener Bypass, Heisenberg Shuttle
他のすべてのパーツ グループのリストに含まれていることが理想ですが、含まれていない場合は、結果を統合できます。
私が調べた他のすべてのSOの質問は、3つのテーブルまたは1つのテーブルのみを使用し、エイリアスと自己結合しています。誰にもアイデアはありますか?
CONCAT
パーツ名に XML はなく、またはの特定の好みもありませんSELECT '+'
。
他の投稿にリンクしますが、ポイントなしではできません:(