[Hỏi] xin tư vấn câu lệnh truy vấn

Thảo luận trong 'PHP & MySQL' bắt đầu bởi VuThiTuongThi, 15/2/14.

  1. VuThiTuongThi

    VuThiTuongThi Thành viên mới

    em tạo ra 3 bảng như sau:
    suppliers(sid,name,address) với khóa là sid
    parts(pid,name,color) với khóa chính là pid
    catalogs(sid,pid,cost) với khóa chính là tập hợp (sid,pid)
    yêu cầu truy vấn thông tin:
    1.tìm mã số của nhà cung cấp có bán TẤT CẢ vật tư màu đỏ HOẶC màu xanh.
    2.tìm cặp mã nhà cung cấp trong đó nhà cung cấp thứ nhất có bán 1 vài vật tư nào đó đắt hơn nhà cung cấp thứ 2
    3.tìm mã vật tư mà MỌI nhà cung cấp chào bán dưới 200.(ko tính trường hợp not null)
    theo bản thân em thì :
    1. SELECT * FROM parts, catalogs WHERE parts.pid = catalogs.pid AND parts.color = 'red' OR parts.color='green' --> sẽ lấy được mã sid từ bảng catalogs nhưng em nghĩ là cách này ko thể đưa ra được nhà vật tư đúng yêu cầu là có tất các vật tư đều màu đỏ hoặc xanh.
    2. Yêu cầu này không rõ ràng, vì có thể có 3, 4 nhà cung cấp cùng bán 1 sản phẩm thì sao. Lúc đó mình sẽ lấy cặp nào. và em cũng ko biết làm câu này.
    3. SELECT * FROM catalogs WHERE cost <= 200 --> sẽ lấy được mã vật tư từ bảng catalogs nhưng cũng ko đúng với yêu cầu là mọi nhà cung cấp đều có giá nhỏ hơn 200.

    Em thì mới tập tọe MYSQL được có 2 tuần, đọc được cái đề của ptit hí hửng tưởng làm được cơ mà chuối quá. Mong anh chị giải đáp giùm!
    Dưới là cái file ảnh đề thi chi tiết ạ

    Em xin cảm ơn!

    Các file đính kèm:

  2. VuThiTuongThi

    VuThiTuongThi Thành viên mới

    ko ai giúp đc em sao ?
  3. VietPublic

    VietPublic Active Member

    1.
    Mã:
    select s.sid from suppliers s, parts p, catalogs c
    where (p.color="RED" or p.color="BLUE") and s.sid=c.sid and c.pid= p.pid
    
    (Để tối ưu hóa câu lệnh, nên điều kiện = trước khi join)
  4. VietPublic

    VietPublic Active Member

    2.
    Mã:
    select  s1.sid, s2.sid
    from suppliers s1, suppliers s2, catalogs c1, catalogs c2
    where c1.cost> c2.cost and  s1.sid=c1.sid and s2.sid=c2.sid and c1.pid=c2.pid
    Mình chưa test, bạn test lại và chỉnh sửa
    Lê Xuân Thành thích bài này.
  5. VuThiTuongThi

    VuThiTuongThi Thành viên mới

    theo em đề bài ở đây yêu cầu là đưa ra ds nhà cung cấp mà tất cả các sản phẩm mà nhà cung cấp đó cung cấp ra đều có màu đỏ hoặc đều cùng màu xanh
  6. VuThiTuongThi

    VuThiTuongThi Thành viên mới

    nếu làm theo cách này sẽ dẫn đến có những kết quả trùng nhau vì 1 nhà cung cấp có thể bán nhiều sản phẩm với giá ít hơn nhà cung cấp kia. Theo em thì nên sửa là
    "
    select distinct s1.sid, s2.sid
    from suppliers s1, suppliers s2, catalogs c1, catalogs c2
    where c1.cost> c2.cost and s1.sid=c1.sid and s2.sid=c2.sid and c1.pid=c2.pid
    "
    VietPublic thích bài này.
  7. vuxitrum

    vuxitrum Thành viên mới

    1. select distinct T.sid from
    (SELECT sid FROM parts, catalogs WHERE parts.pid = catalogs.pid AND parts.color = 'red'
    union
    SELECT sid FROM parts, catalogs WHERE parts.pid = catalogs.pid AND parts.color='green') T

Chia sẻ trang này