Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Help! Truy vấn trong SQL

08:59 04-04-2017 4.002 lượt xem 8 bình luận

Em có bài tập về truy vấn lồng trong SQL nhưng làm mãi không đúng, mong mọi người giúp em với.Em cảm ơn nhiều ạ:

Cho CSDL Quanlybongda gồm các bảng CAULACBO, TRANDAU, BANGXH, SANVD

CAULACBO: MACLB, TENCLB,MASAN ,MATINH

BANGXH: MACLB, NAM, VONG,SOTRAN, THANG, HOA,THUA, HANG

SANVD: MASAN, TENSAN

TRANDAU:MATRAN, NAM, VONG, NGAYTD,  MACLB1, MACLB2, KETQUA

Câu hỏi:

1. Cho biết danh sách các trận đấu ( NGAYTD, TENSAN, TENCLB1, TENCLB2, KETQUA) của câu
lạc bộ CLB có thứ hạng thấp nhất trong bảng xếp hạng vòng 3 năm 2009.
2. Cho biết mã câu lạc bộ, tên câu lạc bộ đã tham gia thi đấu với tất cả các câu lạc bộ còn lại (kể
cả sân nhà và sân khách) trong mùa giải năm 2009.
3. Cho biết mã câu lạc bộ, tên câu lạc bộ đã tham gia thi đấu với tất cả các câu lạc bộ còn lại (
chỉ tính sân nhà) trong mùa giải năm 2009.

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Nhật Minh đã bình luận 10:40 10-04-2017

Câu 1 mình vừa làm ra được là như thế này, vậy còn cách nào tối ưu hơn không mọi người?

 

SELECT td.NGAYTD, td.KETQUA, clb1.TENCLB, clb2.TENCLB, san.TENSAN
FROM dbo.TRANDAU td, dbo.CAULACBO clb1, dbo.CAULACBO clb2, dbo.SANVD san
WHERE td.MASAN = san.MASAN AND clb1.MACLB = td.MACLB1 AND clb2.MACLB = td.MACLB2 AND (clb1.MACLB IN(
	SELECT xh.MACLB
	FROM dbo.BANGXH xh
	WHERE xh.HANG IN  ( SELECT MAX(xh.HANG) FROM dbo.BANGXH xh)
) OR clb2.MACLB IN(
	SELECT xh.MACLB
	FROM dbo.BANGXH xh
	WHERE xh.HANG IN  ( SELECT MAX(xh.HANG) FROM dbo.BANGXH xh)
))

 

Nhật Minh đã bình luận 09:04 10-04-2017

vâng, lần đầu đăng bài nên còn nhiều thiếu sót. Xin lỗi mọi người

Code của mình đây:

Câu 1:

SELECT NGAYTD, TENSAN, clb1.TENCLB, KETQUA
FROM dbo.TRANDAU,dbo.SANVD, (
	SELECT DISTINCT dbo.CAULACBO.MACLB, TENCLB
	FROM dbo.BANGXH JOIN  dbo.CAULACBO ON CAULACBO.MACLB = BANGXH.MACLB
	GROUP BY dbo.BANGXH.MACLB, HANG
	HAVING HANG = MIN(DISTINCT HANG)
) clb1
WHERE dbo.TRANDAU.MASAN = dbo.SANVD.MASAN AND dbo.TRANDAU.MACLB1 = clb1.MACLB
UNION
SELECT NGAYTD, TENSAN, clb2.TENCLB, KETQUA
FROM dbo.TRANDAU,dbo.SANVD, (
	SELECT DISTINCT dbo.CAULACBO.MACLB, TENCLB
	FROM dbo.BANGXH JOIN  dbo.CAULACBO ON CAULACBO.MACLB = BANGXH.MACLB
    GROUP BY dbo.BANGXH.MACLB, HANG
	HAVING HANG = MIN(DISTINCT HANG)
) clb2
WHERE dbo.TRANDAU.MASAN = dbo.SANVD.MASAN AND dbo.TRANDAU.MACLB2 = clb2.MACLB

Câu 3:

SELECT dbo.CAULACBO.MACLB, dbo.CAULACBO.TENCLB
FROM dbo.CAULACBO, (
	SELECT MACLB1
	FROM dbo.TRANDAU
	WHERE NAM = '2009'
	GROUP BY MACLB1
	HAVING COUNT(DISTINCT MACLB1) + 1= (
		SELECT COUNT(DISTINCT MACLB)
		FROM dbo.BANGXH
        WHERE NAM = '2009'
	)
) ab
WHERE dbo.CAULACBO.MACLB = ab.MACLB1

Câu 2 mình chưa làm.

http://imgur.com/a/GNhWf

visaotbuon đã bình luận 01:14 05-04-2017

Bạn nên đặt câu hỏi là nhờ mọi người làm giúp mình bài này thì đúng hơn....mình k biết làm.ahihi

Đường Đức Thanh đã bình luận 19:43 04-04-2017

bạn nên up code và các câu hỏi bạn làm không được để mọi người dễ hình dung về bài toán hơn :)

HaSama đã bình luận 19:19 04-04-2017

nên cho thêm hình cái hình diagram với quan hệ các bảng để ai trả lời còn dễ hình dung

Câu hỏi mới nhất