【发布时间】:2019-06-26 12:14:21
【问题描述】:
我有三个表 A_PRODUCT、A_MODEL 和 A_AREA。可以使用 PRODUCT_ID 连接这些表。我想得到一个输出,使得 A_PRODUCT 表中的一行后面是 A_MODEL 表中的行,然后是 A_AREA 表中的行。以下是创建示例数据的 SQL:
CREATE TABLE A_PRODUCT
(
PRODUCT_ID NVARCHAR(30),
PODUCT_NAME NVARCHAR(30),
);
INSERT INTO A_PRODUCT (PRODUCT_ID, PODUCT_NAME)
VALUES ('P-1', 'LONG-SLEEVE LOGO JERSEY');
INSERT INTO A_PRODUCT (PRODUCT_ID, PODUCT_NAME)
VALUES ('P-2', 'GLASSES');
CREATE TABLE A_MODEL
(
MODEL_ID NVARCHAR(30),
MODEL_NAME NVARCHAR(30),
PRODUCT_ID NVARCHAR(30)
);
INSERT INTO A_MODEL (MODEL_ID, MODEL_NAME, PRODUCT_ID)
VALUES ('M-1', 'OLD JERSEY', 'P-1');
INSERT INTO A_MODEL (MODEL_ID, MODEL_NAME, PRODUCT_ID)
VALUES ('M-2', 'RAY-BAN', 'P-2');
INSERT INTO A_MODEL (MODEL_ID, MODEL_NAME, PRODUCT_ID)
VALUES ('M-3', 'ARMANI', 'P-2');
CREATE TABLE A_AREA
(
AREA_ID NVARCHAR(30),
AREA_NAME NVARCHAR(30),
PRODUCT_ID NVARCHAR(30)
);
INSERT INTO A_AREA (AREA_ID, AREA_NAME, PRODUCT_ID)
VALUES ('A-1', 'SOUTH', 'P-1');
INSERT INTO A_AREA (AREA_ID, AREA_NAME, PRODUCT_ID)
VALUES ('A-2', 'NORTH', 'P-1');
INSERT INTO A_AREA (AREA_ID, AREA_NAME, PRODUCT_ID)
VALUES ('A-3', 'EAST', 'P-1');
INSERT INTO A_AREA (AREA_ID, AREA_NAME, PRODUCT_ID)
VALUES ('A-4', 'WEST', 'P-1');
INSERT INTO A_AREA (AREA_ID, AREA_NAME, PRODUCT_ID)
VALUES ('A-5', 'SOUTH-WEST', 'P-2');
我的预期输出是:
|PRODUCT|P-1|LONG-SLEEVE LOGO JERSEY|
|MODEL|M-1|OLD JERSEY|
|AREA|A-1|SOUTH|
|AREA|A-2|NORTH|
|AREA|A-3|EAST|
|AREA|A-4|WEST|
|PRODUCT|P-2|GLASSES|
|MODEL|M-2|RAY-BAN|
|MODEL|M-3|ARMANI|
|AREA|A-5|SOUTH-WEST|
我尝试了以下查询,但它没有给我想要的输出:
;WITH CTE AS
(
SELECT CONCAT('|PRODUCT|', P.PRODUCT_ID,'|',P.PODUCT_NAME,'|') AS Col1,
CONCAT('|MODEL|', M.MODEL_ID,'|',M.MODEL_NAME,'|') AS COl2,
CONCAT('|AREA|', A.AREA_ID,'|',A.AREA_NAME,'|') AS COl3
FROM A_PRODUCT P
JOIN A_MODEL M
ON P.PRODUCT_ID = M.PRODUCT_ID
JOIN A_AREA A
ON P.PRODUCT_ID = A.PRODUCT_ID
)
SELECT Result
FROM CTE
CROSS APPLY (VALUES (Col1,'Col1'),(Col2,'Col2'),(Col3,'Col3')
)DT (Result,Names);
【问题讨论】:
-
您希望您的行按特定顺序返回,但您解决问题的尝试却没有在任何地方使用 ORDER BY?为什么?
-
抱歉,我忘记在示例查询中输入 order by,但是,由于我得到的行是重复的,它不会给我所需的输出。
-
我认为你想要一个 UNION 而不是一个联接!
标签: sql sql-server join