Fiddle: http://sqlfiddle.com/#!18/94237 /1

DDL dan DML:

CREATE TABLE Product (
  id int not null,
  code varchar(20),
  weight varchar(10)
);

INSERT INTO product (id, code, weight)
VALUES 
(1, '0001101', '1kg'),
(2, '0001400', '10 x 1kg'),
(3, '0001110', '10kg'),
(4, '0002050', '500g'),
(5, '0003050', '500g'),
(6, '0001WIP', '1kg'),
(7, '0003WIP', '1kg');


CREATE TABLE Stock(
  productID int,
  inStock int
);

INSERT INTO Stock
(productID, inStock)
values
(6, 8),
(7, 0);

Keluaran saat ini

SELECT *
  FROM Product p
JOIN
  Stock s ON p.id = s.productID
JOIN
  product p2 ON LEFT(p.code, 4) = LEFT(p2.code, 4) AND p.weight LIKE '%1kg%'


id  code     weight productID   inStock id  code     weight
6   0001WIP  1kg    6           8       1   0001101  1kg
6   0001WIP  1kg    6           8       2   0001400  10 x 1kg
6   0001WIP  1kg    6           8       3   0001110  10kg  -------- This shouldn't be here
7   0001WIP  1kg    7           0       5   0003050  500g  -------- This shouldn't be here
6   0001WIP  1kg    6           8       6   0001WIP  1kg
7   0003WIP  1kg    7           0       7   0003WIP  1kg

Catatan yang saya tandai sebagai ---Ini seharusnya tidak ada di sini adalah masalah saya saat ini.

Saya pada dasarnya bermaksud untuk mencocokkan stok meja dan tabel dengan kode produk, dengan menggunakan LEFT() dan juga mencocokkan jika mengandung 1kg.

Keluaran yang diinginkan

id  code     weight productID   inStock id  code     weight
6   0001WIP  1kg    6           8       1   0001101  1kg
6   0001WIP  1kg    6           8       2   0001400  10 x 1kg
6   0001WIP  1kg    6           8       6   0001WIP  1kg
7   0003WIP  1kg    7           0       7   0003WIP  1kg

Pertanyaan

Bagaimana cara mencapai double join seperti itu? Bergabunglah dengan 4 karakter dari kiri dan apakah itu mengandung berat 1kg?

1
LV98 7 Januari 2021, 18:15

3 jawaban

Jawaban Terbaik
SELECT *
  FROM Product p
JOIN
  Stock s ON p.id = s.productID
JOIN
  product p2 ON LEFT(p.code, 4) = LEFT(p2.code, 4) AND p.weight LIKE '%1kg%' AND p2.weight LIKE '%1kg%'
2
Russ 7 Januari 2021, 15:21

Ubah ke p2 dari p.

AND p2.weight LIKE '%1kg%'

Atau jika Anda membutuhkan kedua sisi dari;

AND p.weight LIKE '%1kg% AND p2.weight LIKE '%1kg%''
1
mehmetx 7 Januari 2021, 15:26

Saya baru saja memasukkan kode Anda dan ini menyelesaikan masalah Anda

SELECT *
FROM #Product p
INNER JOIN #Stock s ON p.id = s.productID
INNER JOIN #product p2 ON LEFT(p.code, 4) = LEFT(p2.code, 4) 
WHERE CHARINDEX('1kg', p2.weight, 1)>0

Anda mungkin telah menempatkan suka pada bergabung ke produk yang salah :)

1
Doug Coats 7 Januari 2021, 15:27