Sự khác biệt trong 2 câu truy vấn.

Liên hệ QC

nguyenacc_audit

A demo is worth a thousand words
Tham gia
3/7/18
Bài viết
37
Được thích
22
Giới tính
Nam
Nghề nghiệp
Anh nghèo không có môtô, Chỉ có xe đạp thô sơ nhất làng.
Nhờ Anh/Chị giúp em về lỗi trong câu truy vấn thứ 2 ( Hình đính kèm) với ạ.

Cấu trúc của các bảng:
1. KHACHHANG (MAKH, HOTEN, DCHI, SODT, NGSINH, DOANHSO, NGDK)
2. HOADON (SOHD, NGHD, MAKH, MANV, TRIGIA)

1599892747595.png

Em cảm ơn ạ,
 
Nhờ Anh/Chị giúp em về lỗi trong câu truy vấn thứ 2 ( Hình đính kèm) với ạ.

Cấu trúc của các bảng:
1. KHACHHANG (MAKH, HOTEN, DCHI, SODT, NGSINH, DOANHSO, NGDK)
2. HOADON (SOHD, NGHD, MAKH, MANV, TRIGIA)

View attachment 245429

Em cảm ơn ạ,

Trong cái subquery của câu thứ 2 nó trả về nhiều MAKH, nhiều số HĐ vì sẽ có nhiều hoá đơn cùng ngày '1/1/2007' -> báo lỗi.
 
Tôi chả biết bạn muốn làm cái gì.
Nếu chỉ sửa cho hết lỗi thì thay dấu = với IN
Giải thích: dấu = chỉ so sánh được khi câu truy vấn con (subquery) trả về 1 trị. Câu truy vấn con của bạn có thể trả về nhiều trị (mỗi record được select là 1 trị) thì bạn phải cho nó tìm trong ấy với từ khoá IN
 
Lần chỉnh sửa cuối:
Lấy cái nội dung lỗi dịch sang tiếng Việt
"sql subquery returned more than 1 value" thì sẽ ra giống bạn gì ở #3 đã giải thích.
Đề bài có thể sẽ là: Tìm khách hàng có phát sinh hóa đơn ngày '01/01/2007'
Theo như mệnh đề select ở #1 cho thấy không cần sử dụng bảng HOADON trong mệnh đề FROM
Vậy ngoài cách bạn gì ở #3 hướng dẫn thì câu lệnh 2 có thể sửa thành như này cho vui :)


Mã:
SELECT kh.makh, kh.hoten
FROM khachhang kh
WHERE EXISTS (SELECT 0 FROM HOADON hd WHERE kh.makh = hd.makh and hd.NGHD = '2007-01-01')
 
:<>_+)(9 thì các bác trả lời rồi.
Còn tôi thấy có thể dùng được join câu truy vấn
 
Anh xem hít to ri sẽ biết địa chỉ. :)
Tôi biết. Nếu tôi không biết thì tôi đã coi như là người không có kiến thức chen vào nói chuyện tầm xàm.
Người nói cái câu ở bài #5 không có vẻ giống người mang cái hít tô (cà) ri kia.
.
:<>_+)(9 thì các bác trả lời rồi.
Còn tôi thấy có thể dùng được join câu truy vấn
Đã xem bài #1 chưa?
 
Tôi chả biết bạn muốn làm cái gì.
Nếu chỉ sửa cho hết lỗi thì thay dấu = với IN
Giải thích: dấu = chỉ so sánh được khi câu truy vấn con (subquery) trả về 1 trị. Câu truy vấn con của bạn có thể trả về nhiều trị (mỗi record được select là 1 trị) thì bạn phải cho nó tìm trong ấy với từ khoá IN
Nhờ Bác em hiểu ra vấn đề rồi ạ, em cũng mới tập tành nên nhiều chỗ còn chưa biết. Cảm ơn bác!
Bài đã được tự động gộp:

Lấy cái nội dung lỗi dịch sang tiếng Việt
"sql subquery returned more than 1 value" thì sẽ ra giống bạn gì ở #3 đã giải thích.
Đề bài có thể sẽ là: Tìm khách hàng có phát sinh hóa đơn ngày '01/01/2007'
Theo như mệnh đề select ở #1 cho thấy không cần sử dụng bảng HOADON trong mệnh đề FROM
Vậy ngoài cách bạn gì ở #3 hướng dẫn thì câu lệnh 2 có thể sửa thành như này cho vui :)


Mã:
SELECT kh.makh, kh.hoten
FROM khachhang kh
WHERE EXISTS (SELECT 0 FROM HOADON hd WHERE kh.makh = hd.makh and hd.NGHD = '2007-01-01')

Em cảm ơn, lệnh EXISTS em chưa dùng lần nào. Thấy cũng tò mò, sẽ áp dụng và tìm hiểu thêm ^^.
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom