Yêu cầu cần lấy ra tên của 2 đội bóng tham gia 1 trận đấu
Nghe rất bình thường nhưng khi lấy ví dụ hay làm bài tập hiếm khi ta gặp :D
Trong 1 record của bảng matches có chứaa id đội nhà và id đội khách, câu hỏi là giờ làm sao bạn có thể lấy ra tên 2 đội ấy từ bảng teams chỉ trong 1 câu truy vấn?NOTE: kết quả trả về tên 2 đội phải nằm trên 1 dòng
Trước giờ tớ quen dùng kiểu Natural Join :
FORM matches, teams
WHERE teams.id = matches.guessTeamId
để nối 2 bảng nhưng theo lối này tớ vẫn chưa nghĩ ra cách để lấy được tên cả 2 đội ra cùng 1 lúc.
SOLUTION:
dùng LEFT JOIN và ALIAS tên TABLE
SELECT matches.id as id, homeTeam.name as homeTeam, homeTeamGoals, guessTeam.name as guessTeam, rounds.name as round, startDateTime, channels.name as channel, stadiums.name as stadium
FROM `matches`
LEFT JOIN teams as homeTeam On homeTeam.id = matches.homeTeamId
LEFT JOIN teams as guessTeam ON guessTeam.id = matches.guessTeamId
LEFT JOIN rounds ON rounds.id = rounds.idLEFT JOIN teams as guessTeam ON guessTeam.id = matches.guessTeamId
LEFT JOIN channels ON channels.id = channelId
LEFT JOIN stadiums ON stadiums.id = stadiumId
WHERE matches.roundId = rounds.id AND matches.channelId = channels.id AND matches.stadiumId = stadiums.id
lúc đầu tớ định để kiểu "mixxing" 2 loại (nghĩa là chỗ FROM có tên các bảng khác) nhưng mysql báo lỗi. Đành dùng kiểu thuần LEFT JOIN (chỉ có 1 bảng ở chỗ FROM rồi LEFT JOIN các bảng còn lại)
Đoạn WHERE ở cuối là CẦN THIẾT, vì nếu không có thì truy vấn sẽ trả về nhiều kquả chứ không phải một kết quả duy nhất.
Ai có cách giải khác thì cm nhóe :*
Tại sao lại cứ phải dùng JOIN mà ko dùng điều kiện (where) là một câu truy vấn khác?
ReplyDeleteđương nhiên là với một biểu thức đại số thì có nhiều cách biểu diễn tương đương, tương tự trong truy vấn cũng thế, nếu mà cho thêm một vài hình dùng về bảng ghi thì mọi người dễ hình dung hơn nữa.
ReplyDeleteTrong đầu mình vẫn thích dùng truy vấn con hơn khi mình không lười nghĩ.
http://pastebin.com/Q0zLZyyH
ReplyDeleteđây là db cho những ai muốn hình dung. Các bạn tự thêm các "bản ghi" vào