Hỏi về truy vấn trong SQL server

Capture1

Dear các bạn! Mình đang có hai cột như hình ! Các bạn cho mình hỏi câu query có thể lấy tên các ID mà vừa có Táo hoặc Nho như bên Table Sản Phẩm !

Ví dụ như bên hình là mình lấy được CustomerId là 1 .

Thx các bạn !

khong hiểu bác ơi ! bác giải thích duoc khong

Tôi đặt giả thuyết là bạn muốn tìm những khách hàng nào mua tất cả sản phẩm có trong table Sản Phẩm. Nếu đúng như vậy, thì query của bạn có thể sắp xếp như sau:

select CustomerID
from Invoice
group by CustomerID
having count(distinct ProductName) = (select count(Name) from Product)

Giải thích: đầu tiên bạn tìm có bao nhiêu loại product trong table Product (product là sản phẩm - tôi tạm dùng tiếng Anh cho các table name và column name cho nhất quán) với query select count(Name) from Product. Sau đó bạn tìm tất cả các các loại product mà mỗi customer mua từ table Invoice. Nếu hai số này bằng nhau thì đó là customer bạn cần.

Góp ý: bạn nên sử dụng hoặc là tiếng Việt hoặc là tiếng Anh để đặt tên table và các column, đừng làm nửa này nửa kia như trong ví dụ của bạn, viết queryvà giải thích đều khó :slight_smile:

Tên của các column cũng không cần để từ “Cột” vào, nó cũng làm cho query của bạn rối rắm hơn.

4 Likes

Nếu ko nhầm thì bạn nên tạo 1 bảng chi tiết hóa đơn lưu tt id hóa đơn và id sản phẩm , muốn lấy ds hoa quả trong hóa đơn thì join 3 c ái chi tiết hóa đơn , hóa đơn , sản phẩm rồi sẽ lấy được sản phẩm trong hóa đơn , quan hệ nhiều nhiều ấy

3 Likes

Cám ơn bạn rất nhiều nhé ! Mình sẽ lưu ý để post câu hỏi chất lượng hơn ! Thx bạn

Nhìn thiết kế tables của bạn giống file Excel hơn là CSDL !
Bạn có thể sửa lại như bên dưới, bổ sung thêm vào kiểu dữ liệu, khóa, đổi tên,…

1. Danh mục Sản phẩm:

PRODUCTS

  • PROD_ID
  • PROD_NAME
  • PRICE
  • AVAILABLE

2. Đơn hàng:

ORDERS

  • ORD_ID
  • ORD_DATE
  • CUST_ID

3. Chi tiết Đơn hàng

ORDER_DETAILS

  • OD_ID
  • ORD_ID
  • PROD_ID
  • QUANTITY
4 Likes

Cám ơn bạn nhé ! Mình đã giải được do dùng Having và Group By . Mà do bận quá chưa post được ! Rảnh mình sẽ post nhé

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?