如何选择在其他表格中显示pdf时不显示?

时间:2013-10-28 22:49:18

标签: mysql sql mysqli

大家好,我正在尝试创建一个选择,以便在其他表中的其他列中有PDF时不显示

来自博客的SELECT *

|blogs|
 |id|  |number|
  1     423423
  2     432422
  3     123233
  4     324233

SELECT b.id,p.id,p.file_name FROM posts p,blogs b

|posts|
 |id|  |blog_id| |file_name|
   1       1       C://blog1.pdf
   2       1       C://blog2.pdf
   3       2       C://blog3.pdf

尝试做所有没有PDF的文件

|id|    |number|   
 3       123233
 4       324233

4 个答案:

答案 0 :(得分:1)

SELECT b.id, b.number FROM posts p INNER JOIN blogs b ON b.id= p.blog_id WHERE p.file_name NOT LIKE '%.pdf'

试试这个。这就是它在t-SQL中的工作原理,不确定它在MySQL中是否相同

答案 1 :(得分:1)

您想要进行左外连接(因此将包含没有帖子的博客),然后排除任何带有(PDF)帖子的博客。这在技术上称为反半连接。

它在标准SQL中的工作方式如下,据我所知,它应该在T-SQL(MS SQL Server)或MySQL中工作:

SELECT b.id, b.number
FROM blogs AS b
LEFT OUTER JOIN posts AS p
ON p.blog_id = b.id
WHERE p.blog_id IS NULL

假设posts表中的所有行都具有填充了PDF名称的文件名列。如果情况并非如此,并且您只需排除具有PDF帖子而非其他类型文件的博客,则您需要使用子查询:

SELECT b.id, b.number
FROM blogs AS b
LEFT OUTER JOIN (SELECT blog_id FROM posts WHERE file_name LIKE '%pdf') AS p
ON p.blog_id = b.id
WHERE p.blog_id IS NULL

答案 2 :(得分:1)

您需要LEFT JOIN。试试这个:

SELECT b.* FROM blogs b
LEFT JOIN posts p ON b.id = p.blog_id
WHERE p.blog_id IS NULL

输出:

| ID | NUMBER |
|----|--------|
|  3 | 123233 |
|  4 | 324233 |

小提琴here

答案 3 :(得分:0)

听起来你需要使用JOIN。根据您的表结构,您需要将blogs表加入posts表。像这样:

SELECT b.id, b.number
FROM blogs b
    JOIN posts p ON b.id = p.blog_id

这假设您的帖子表有一个blog_id字段。如果没有,请从两个表中加入相应的字段。请参阅以下文章以了解有关联接的更多信息。

A Visual Explanation of SQL Joins