【问题标题】:Having trouble with except query除了查询遇到问题
【发布时间】:2015-10-05 13:59:34
【问题描述】:

我有两张桌子(Books 和 Borrowed)。

我想从表Books 中全选。 但首先它将检查BookID 是否存在于表Borrowed 中,如果它确实存在并且它的Status= 1,它将不会包含在select * 语句中。

我试过了,但是不行

select * from Books
except
select `BookdID` where `Status`=1

请帮助我。这是我的桌子

书籍:

 | BookID     | Title       | Author       |
 |:-----------|------------:|:------------:|
 | 1          | The Stars   | William Evan |   
 | 2          | Science 3   | Vhong Navaro |
 | 3          | Let It Burn | Jun Ryl      |
 | 4          | Sky Below   | Jason Midfle |
 | 5          | Wish It     | Shan Uddle   |

借来的:

 | BookID     | BorrowerID  | Status       |
 |:-----------|------------:|:------------:|
 | 6          | 12          | 0            |   
 | 5          | 4           | 0            |
 | 2          | 3           | 1            |
 | 18         | 6           | 1            |
 | 5          | 3           | 0            |

我的目标输出:

| BookID     | Title       | Author       |
|:-----------|------------:|:------------:|
| 1          | The Stars   | William Evan |   
| 3          | Let It Burn | Jun Ryl      |
| 4          | Sky Below   | Jason Midfle |
| 5          | Wish It     | Shan Uddle   |
  *(BookID 2 is is not shown because in the table `Borrowed`, BookID 2's `Status` = 1)*

【问题讨论】:

标签: mysql


【解决方案1】:
select b1.* 
from Books b1
left join Borrowed b2 on b1.bookid = b2.bookid
                     and b2.`Status` = 1
where b2.bookid is null

this great explanation of joins

【讨论】:

  • 上面写着Column 'Status' in on clause is ambiguous,这是什么意思?
  • 这意味着两个表都有一个status 列,而数据库不知道该取哪一个。我更新了查询并将表名添加到status 列。
  • @kielou 我建议您阅读 juergen 提供的页面,然后直接查看MySQL's JOIN documentation。只有了解事物的运作方式,您将来可能能够自己解决类似的问题。实际上你的问题已经被问过了,the answer 也包含一个LEFT JOIN,因为EXCEPT 在 MySQL 中不存在。
  • 谢谢先生。我发现了问题并且有效。非常感谢。
  • @Armfoot 我在等待他的回复时正在阅读,我想我现在可以解决我现在遇到的其他问题,这要感谢 juergen d..
猜你喜欢
  • 1970-01-01
  • 2012-08-11
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 2014-07-09
  • 1970-01-01
相关资源
最近更新 更多