我不知道查詢中您的left join
。 A left join
給出全部行左表(table1
)包括在另一個表(table2
)中沒有對應表的那些行。對於右表中的這些不匹配的行,對於所有table2
的列,您將得到NULL,包括table2.num
。
也許您正在查找inner join
。這取決於您的數據以及您的table2.num
是否無效。只需更換用零的NULL,使用COALESCE
CREATE VIEW `instock` AS
SELECT
table1.name AS name,
table1.supl AS supply,
COALESCE(table2.num,0) AS numbers,
table1.maxnum AS maxnumbers
FROM
(table1
LEFT JOIN table2 ON ((table1.id = table2.id)))
ORDER BY table1.name
或者IFNULL
CREATE VIEW `instock` AS
SELECT
table1.name AS name,
table1.supl AS supply,
IFNULL(table2.num,0) AS numbers,
table1.maxnum AS maxnumbers
FROM
(table1
LEFT JOIN table2 ON ((table1.id = table2.id)))
ORDER BY table1.name
如果你想從table2
完全跳過項目不在table1
(WRT。ID字段),你可以使用一個inner join
:
CREATE VIEW `instock` AS
SELECT
table1.name AS name,
table1.supl AS supply,
table2.num AS numbers,
table1.maxnum AS maxnumbers
FROM
(table1
INNER JOIN table2 ON ((table1.id = table2.id)))
ORDER BY table1.name
再次:這取決於您的需求。 IFNULL/COALESCE將顯示0
而不是NULL,INNER JOIN將完全跳過這些行。
(有疑問時,我總是指this explanation on joins。這是值得一薄荷)
嘗試'COALESCE(table2.num,0)作爲numbers'。 [COALESCE](http://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_coalesce)將返回'0'而不是'NULL'。 – PerlDuck
謝謝,我從來沒有聽說過這個命令,但它確實做到了這一招!此主題已解決 – Kingfox
另一個選項是[IFNULL](http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_ifnull):即'IFNULL(table2.num, 0)作爲數字。 – PerlDuck