我試圖找到三個表中的任何一個IP地址的匹配,但我的查詢告訴我我看的列是不明確的?MySql在三個表中的任何一箇中找到匹配?
SELECT COUNT(*)
FROM `zz_tview`,`zz_tview1`,`zz_tview3`
WHERE `ipaddress` ="192.168.01.01"
所以我得到「在where子句是不明確的列‘ip地址’」這條消息,我將如何構建,首先這所以它的工作原理,其次這樣的查詢是不是太沉重的表有幾千條行?
我試圖找到三個表中的任何一個IP地址的匹配,但我的查詢告訴我我看的列是不明確的?MySql在三個表中的任何一箇中找到匹配?
SELECT COUNT(*)
FROM `zz_tview`,`zz_tview1`,`zz_tview3`
WHERE `ipaddress` ="192.168.01.01"
所以我得到「在where子句是不明確的列‘ip地址’」這條消息,我將如何構建,首先這所以它的工作原理,其次這樣的查詢是不是太沉重的表有幾千條行?
聽起來像是你想這樣,但是這將會產生一個笛卡爾結果這是最有可能不是你想要的結果:
SELECT COUNT(*)
FROM `zz_tview`,`zz_tview1`,`zz_tview3`
WHERE `zz_tview`.`ipaddress` ="192.168.01.01"
OR `zz_tview1`.`ipaddress` ="192.168.01.01"
OR `zz_tview3`.`ipaddress` ="192.168.01.01"
你真的應該構建以此爲JOIN
:
SELECT COUNT(*)
FROM `zz_tview` v
INNER JOIN `zz_tview1` v1
ON v.id = v1.id --- use the column that would join these values
INNER JOIN `zz_tview3` v3
ON v.id = v3.id --- use the column that would join these values
WHERE v.`ipaddress` ="192.168.01.01"
OR v1.`ipaddress` ="192.168.01.01"
OR v3.`ipaddress` ="192.168.01.01"
如果你沒有辦法JOIN
表,那麼你可以使用類似這樣:
select sum(total)
from
(
SELECT count(*) as `total`
FROM `zz_tview` v
where v.`ipaddress` ="192.168.01.01"
union all
SELECT count(*) as `total`
FROM `zz_tview1` v1
where v1.`ipaddress` ="192.168.01.01"
union all
SELECT count(*) as `total`
FROM `zz_tview3` v3
where v3.`ipaddress` ="192.168.01.01"
) src
您可能對以下問答感興趣:[在MySQL中存儲IP地址的最有效方式](http://stackoverflow.com/q/2542011/367456) – hakre