大家好,我正在尝试创建一个选择,以便在其他表中的其他列中有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
答案 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字段。如果没有,请从两个表中加入相应的字段。请参阅以下文章以了解有关联接的更多信息。