SQL从多个数据问题中选择多个FIelds

时间:2011-07-14 16:22:10

标签: mysql

我有一个mysql查询

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则不这样做?

由于

4 个答案:

答案 0 :(得分:0)

您可以使用:

files.fid IS NOT NULL

WHERE条款中。

答案 1 :(得分: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)

的旧方法(ANSI-89)
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

现在,如果您希望查询返回结果,即使文件不匹配,也请使用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

答案 2 :(得分:0)

如果它们具有空值,则它们永远不会在连接操作中被捕获。在SQL中,null不能等于任何东西,包括它自己。

SELECT ..
FROM ...
WHERE x = null

将始终不返回任何内容,因为您无法使用null测试相等性。相反,你必须使用特殊的

WHERE x IS null

语法

答案 3 :(得分: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