Những gì bạn làm ở đây được gọi là JOIN
[mặc dù bạn làm điều đó hoàn toàn vì bạn chọn từ nhiều bảng]. Điều này có nghĩa là, nếu bạn không đặt bất kỳ điều kiện nào trong mệnh đề nơi của bạn, bạn có tất cả các kết hợp của các bảng đó. Chỉ với điều kiện của bạn, bạn hạn chế tham gia với những hàng mà ID đồ uống phù hợp.
Nhưng vẫn còn nhiều hàng X trong kết quả cho mỗi đồ uống, nếu có x ảnh với đồ uống đặc biệt này. Tuyên bố của bạn không hạn chế [các] bức ảnh bạn muốn có!
Nếu bạn chỉ muốn một hàng mỗi lần uống, bạn phải nói với SQL những gì bạn muốn làm nếu có nhiều hàng với một loại đồ uống cụ thể_id. Đối với điều này, bạn cần nhóm và một chức năng tổng hợp. Bạn nói với SQL mục nào bạn muốn nhóm lại với nhau [ví dụ: tất cả các loại đồ uống bằng nhau] và trong lựa chọn, bạn phải biết mục nào khác nhau cho mỗi hàng kết quả được nhóm nên được thực hiện. Đối với các số, đây có thể là trung bình, tối thiểu, tối đa [để đặt tên cho một số].
Trong trường hợp của bạn, tôi không thể thấy cảm giác để truy vấn các bức ảnh cho đồ uống nếu bạn chỉ muốn một hàng. Bạn có thể nghĩ rằng bạn có thể có một loạt các bức ảnh trong kết quả của bạn cho mỗi đồ uống, nhưng SQL không thể làm điều này. Nếu bạn chỉ muốn bất kỳ bức ảnh nào và bạn không quan tâm đến việc bạn sẽ nhận được, chỉ cần nhóm theo đồ uống_id [để chỉ nhận được một hàng mỗi lần uống]:
SELECT name, price, photo
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id
GROUP BY drinks_id
name price photo
fanta 5 ./images/fanta-1.jpg
dew 4 ./images/dew-1.jpg
Trong MySQL, chúng tôi cũng có nhóm_concat, nếu bạn muốn tên tệp được nối với một chuỗi duy nhất:
SELECT name, price, GROUP_CONCAT[photo, ',']
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id
GROUP BY drinks_id
name price photo
fanta 5 ./images/fanta-1.jpg,./images/fanta-2.jpg,./images/fanta-3.jpg
dew 4 ./images/dew-1.jpg,./images/dew-2.jpg
Tuy nhiên, điều này có thể trở nên nguy hiểm nếu bạn có ,
trong các giá trị trường, vì rất có thể bạn muốn chia điều này một lần nữa ở phía máy khách. Nó cũng không phải là một hàm tổng hợp SQL tiêu chuẩn.
4.4.9 & nbsp; sử dụng nhiều hơn một bảng
Bảng
name price photo
fanta 5 ./images/fanta-1.jpg
dew 4 ./images/dew-1.jpg
0 theo dõi những vật nuôi bạn có. Nếu bạn muốn ghi lại thông tin khác về họ, chẳng hạn như các sự kiện trong cuộc sống của họ như thăm bác sĩ thú y hoặc khi lứa được sinh ra, bạn cần một bảng khác. Bảng này nên trông như thế nào? Nó cần phải chứa các thông tin sau:Tên thú cưng để bạn biết mỗi sự kiện này liên quan đến con vật nào.
Một ngày để bạn biết khi nào sự kiện xảy ra.
Một lĩnh vực để mô tả sự kiện.
Một trường loại sự kiện, nếu bạn muốn có thể phân loại các sự kiện.
Với những cân nhắc, câu lệnh
name price photo
fanta 5 ./images/fanta-1.jpg
dew 4 ./images/dew-1.jpg
1 cho bảng name price photo
fanta 5 ./images/fanta-1.jpg
dew 4 ./images/dew-1.jpg
2 có thể trông như thế này:mysql> CREATE TABLE event [name VARCHAR[20], date DATE,
type VARCHAR[15], remark VARCHAR[255]];
Như với bảng
name price photo
fanta 5 ./images/fanta-1.jpg
dew 4 ./images/dew-1.jpg
0, dễ nhất tải các bản ghi ban đầu bằng cách tạo tệp văn bản được chọn theo tab chứa thông tin sau.
1995-05-15 | lít | 4 chú mèo con, 3 nữ, 1 nam |
1993-06-23 | lít | 4 chú mèo con, 3 nữ, 1 nam |
1993-06-23 | lít | 4 chú mèo con, 3 nữ, 1 nam |
1993-06-23 | 5 con chó con, 2 nữ, 3 nam | 1994-06-19 |
Chirpy | 5 con chó con, 2 nữ, 3 nam | 1994-06-19 |
Chirpy | 1999-03-21 | |
Chirpy | 1999-03-21 | |
cần thiết mỏ thẳng | Mảnh mai | 1997-08-03 |
Bowser | Mảnh mai | 1997-08-03 |
Bowser | Mảnh mai | 1997-08-03 |
xương sườn bị gãy
mysql> LOAD DATA LOCAL INFILE 'event.txt' INTO TABLE event;
Bowser
1991-10-12
mysql> SELECT pet.name,
TIMESTAMPDIFF[YEAR,birth,date] AS age,
remark
FROM pet INNER JOIN event
ON pet.name = event.name
WHERE event.type = 'litter';
+--------+------+-----------------------------+
| name | age | remark |
+--------+------+-----------------------------+
| Fluffy | 2 | 4 kittens, 3 female, 1 male |
| Buffy | 4 | 5 puppies, 2 female, 3 male |
| Buffy | 5 | 3 puppies, 3 female |
+--------+------+-----------------------------+
cũi
Răng nanh
1998-08-28
ngày sinh nhật
Đã cho anh ấy một món đồ chơi nhai mới
Bạn không cần phải có hai bảng khác nhau để thực hiện tham gia.Đôi khi rất hữu ích khi tham gia một bảng với chính nó, nếu bạn muốn so sánh các bản ghi trong một bảng với các bản ghi khác trong cùng một bảng đó.Ví dụ: để tìm các cặp sinh sản giữa các vật nuôi của bạn, bạn có thể tham gia bảng
name price photo
fanta 5 ./images/fanta-1.jpg
dew 4 ./images/dew-1.jpg
0 để tạo ra các cặp ứng cử viên của con đực và con cái giống như các loài:mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
FROM pet AS p1 INNER JOIN pet AS p2
ON p1.species = p2.species
AND p1.sex = 'f' AND p1.death IS NULL
AND p2.sex = 'm' AND p2.death IS NULL;
+--------+------+-------+------+---------+
| name | sex | name | sex | species |
+--------+------+-------+------+---------+
| Fluffy | f | Claws | m | cat |
| Buffy | f | Fang | m | dog |
+--------+------+-------+------+---------+
Trong truy vấn này, chúng tôi chỉ định các bí danh cho tên bảng để tham khảo các cột và giữ thẳng thể hiện của bảng mỗi tham chiếu cột được liên kết với.