簡體   English   中英

從同一表中選擇多行

[英]Select Multiple Rows From Same Table

我有兩個表“ book ”和“ category ”。 如何顯示“書”表中的所有行? 注意, category(書表)cat_name(category表 )之間存在聯接

書桌

id   category    title
1    2           a title here
2    2           a title here
3    1           a title here
4    Comedy      a title here
5    1           a title here
6    Horror      a title here

類別

id       cat_name   
----     -------         
1        Language
2        Kids

當前,我正在使用以下sql查詢,它似乎僅顯示具有類別編號的行,而我想要所有數據。 目前,我的html表未顯示第4行和第6行。

SELECT b.id, b.title, b.category, b.author, b.isbn, b.publicationYear,
        c.cat_name
        FROM book AS b
        INNER JOIN category AS c ON b.category = c.id

我的PHP樣本

echo '<td>' . $row['id'] . '</td>';
echo '<td>' . $row['title'] . '</td>';
echo '<td>' . $row['cat_name'] . '</td>';   
echo '<td>' . $row['author'] . '</td>';
echo '<td>' . $row['isbn'] . '</td>';

對php / mysql來說是相當新的,因此任何建議或指導都值得贊賞。

您正在執行inner join ,這將僅返回匹配項。 如果您希望左表中的所有項目使用left join

    SELECT b.id, 
           b.title, 
           b.category, 
           b.author, 
           b.isbn, 
           b.publicationYear,
           c.cat_name
    FROM book AS b
    left JOIN 
    category AS c 
    ON
    b.category = c.id

更新:

如果左cat_namecategory表不匹配,則cat_name顯示為null

解決方法是

SELECT 
b.id, 
b.title, 
b.category, 
b.author, 
b.isbn, 
b.publicationYear,
case 
 when cast(b.category as unsigned)= 0 then b.category
 else c.cat_name 
end as cat_name 
FROM book AS b
left JOIN category AS c ON b.category = c.id

嘗試與此,我認為它解決了您的問題

SELECT b.id, 
       b.title, 
       b.category, 
       b.author, 
       b.isbn, 
       b.publicationYear,
       c.cat_name
FROM book AS b , category AS c
WHERE b.category = c.id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM