2011-07-14 40 views
0

多個字段我有一個MySQL查詢SQL選擇從多個數據問題

SELECT content_type_clients.nid, content_type_clients.field_logo_display_value, 
files.filepath, node.title, node.created 
    FROM content_type_clients, files, node 
WHERE content_type_clients.nid=node.nid 
AND files.fid=content_type_clients.field_client_logo_fid 
    ORDER BY field_logo_display_value DESC, node.created ASC 

但某些字段不會有files.fid=content_type_clients.field_client_logo_fid值。有沒有辦法看到如果files.fid和content_type_clients.field_client_logo_fid有一個值(不是NULL),如果它是NULL不這樣做?

感謝

回答

0

如果字段不匹配(或具有NULL)值,您的查詢將不會返回結果。所以如果它是NULL,它不會這樣做。

您的查詢

SELECT content_type_clients.nid, content_type_clients.field_logo_display_value, files.filepath, node.title, node.created FROM content_type_clients, files, node WHERE content_type_clients.nid=node.nid AND files.fid=content_type_clients.field_client_logo_fid ORDER BY field_logo_display_value DESC, node.created ASC 

實際上是寫的更現代(ANSI-92)

SELECT content_type_clients.nid, content_type_clients.field_logo_display_value, files.filepath, node.title, node.created 
FROM content_type_clients 
JOIN files ON files.fid=content_type_clients.field_client_logo_fid 
JOIN node ON content_type_clients.nid=node.nid 
ORDER BY field_logo_display_value DESC, node.created ASC 

現在的舊方式(ANSI-89)如果你想查詢甚至返回結果當文件不匹配時,請使用LEFT OUTER JOIN替代:

SELECT content_type_clients.nid, content_type_clients.field_logo_display_value, files.filepath, node.title, node.created 
FROM content_type_clients 
JOIN node ON content_type_clients.nid=node.nid 
LEFT OUTER JOIN files ON files.fid=content_type_clients.field_client_logo_fid 
ORDER BY field_logo_display_value DESC, node.created ASC 
0

你可以使用:

files.fid IS NOT NULL

WHERE條款

0

如果它們具有空值,陷入連接操作中。在SQL中,null不能等於任何東西,包括它本身。

SELECT .. 
FROM ... 
WHERE x = null 

將永遠不會返回任何內容,因爲您無法測試與null是否相等。相反,你必須使用特殊

WHERE x IS null 

語法

0

這也應該工作。它只會選擇存在於content_type_clients表中的文件。

SELECT content_type_clients.nid, content_type_clients.field_logo_display_value,  
files.filepath, node.title, node.created 
    FROM files left outer join content_type_clients on files.fid=content_type_clients.field_client_logo_fid 
    left outer join node on content_type_clients.nid=node.nid 
ORDER BY field_logo_display_value DESC, node.created ASC