;WITH cte
AS
(
SELECT ID, Name, Barcode
FROM (
VALUES
(1, 'ABC', '349377934434'),
(2, 'DEF', '349377934434'),
(3, 'XYZ', NULL),
(4, 'XXX', NULL),
(5, 'ABC1', '34937'),
(6, 'DEF1', '34937'),
(7, 'DEF2', '34937')
)v(ID, Name, Barcode)
)
SELECT DISTINCT v.ID, v.Name, c.Barcode
FROM cte c
CROSS APPLY (SELECT TOP 1 ID, Name FROM cte WHERE Barcode = c.Barcode) v
WHERE c.Barcode IS NOT NULL
UNION
SELECT ID, Name, Barcode
FROM cte c
WHERE c.Barcode IS NULL
(私は、MySQLで一時テーブルを使用する方法がわからないので、私は単純なテーブル "TEMP" をドロップ/作成):
CREATE TABLE temp(id INT, name VARCHAR(20), barcode VARCHAR(20));
INSERT INTO temp SELECT 1, 'ABC', '349377934434';
INSERT INTO temp SELECT 2, 'DEF', '349377934434';
INSERT INTO temp SELECT 3, 'XYZ', NULL;
INSERT INTO temp SELECT 4, 'XXX', NULL;
INSERT INTO temp SELECT 5, 'ABC1', '34937';
INSERT INTO temp SELECT 6, 'DEF1', '34937';
INSERT INTO temp SELECT 7, 'XYZ2', '34937';
SELECT DISTINCT v.ID, v.Name, c.Barcode
FROM temp c
INNER JOIN temp v ON v.ID = (SELECT ID FROM temp WHERE Barcode = c.Barcode LIMIT 1)
WHERE c.Barcode IS NOT NULL
UNION
SELECT ID, Name, Barcode
FROM temp
WHERE Barcode IS NULL;
DROP TABLE temp;
ご返信ありがとうございます。どうすればMysqlでこれを達成できますか? – Dhirender
私は私の答えを編集しました –
ありがとうございました。これは私が探していたものです。 – Dhirender