[英]Which type of join to use?
我有一個名為PROJECT_CATEGORY的表,它包含兩個字段
cat_id和cat_title
我將cat_id存儲在另一個名為PROJECTS的表中,因此:
project_category.cat_id = projects.cat_id
使用MySQL運行查詢以顯示cat_title
的最佳方法是什么? 換句話說,我想顯示名稱而不是表的ID號。 這項工作會:
SELECT * FROM projects INNER JOIN projects ON project_category.cat_id = projects.cat_id
然后調用它:
'.$row['cat_title'].'
有什么想法嗎?
如果每個項目都有一個有效的cat_id並且cat_id是唯一的,則INNER JOIN可以。
如果任何項目的NULL cat_id為NULL,則需要LEFT JOIN。
如果cat_id不是唯一字段(主鍵),則可能要使用子查詢將自己限制為每個項目一個結果。
盡量不要使用SELECT *,而是選擇所需的特定字段。 另外,如果您在查詢中使用多個表,請對其適當別名,以便可以根據需要提取值,而不會遇到歧義性問題。
無論如何,您可以嘗試以下方法:
SELECT
project_category.cat_title
,projects.*
FROM
projects
LEFT OUTER JOIN
project_category
ON project_category.cat_id = projects.cat_id
您可以使用NATURAL JOIN
:
SELECT CAT_TITLE
FROM projects
NATURAL JOIN project_category
如果colunms是相同類型且不為null,則無需將字段放在聯接中,它將很好地工作。
SELECT
projects.cat_id cat_id
FROM
projects INNER JOIN
project_category ON project_category.cat_id = projects.cat_id
SELECT cat_title
FROM projects
INNER JOIN project_category ON project_category.cat_id = projects.cat_id
那應該工作。
您的加入看起來不錯。 FWIW,在這種情況下,我將使用USING
子句。 它的工作原理相同,但是更加簡潔明了:
SELECT * FROM projects INNER JOIN project_category USING (cat_id);
如果您在$row
關聯數組中找不到該列時遇到問題,我將檢查您的列定義的拼寫,包括大寫字母。 如果以這種方式聲明表:
CREATE TABLE `Project_Category` (
`Cat_ID` INTEGER NOT NULL,
`Cat_Title` VARCHAR(20) NOT NULL
);
然后,結果集可以在數組鍵中使用該文字拼寫和大寫形式。 PHP數組鍵區分大小寫。
print $row['Cat_Title'];
您可能應該轉儲$row
數組,以查看其認為的鍵是什么:
print_r($row);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.