我有一个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则不这样做?
由于
答案 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