【问题标题】:How to find a record that does not exists from a table based on other table value如何根据其他表值从表中查找不存在的记录
【发布时间】:2020-12-07 19:25:50
【问题描述】:

所以我有两张桌子,这张是books

这个是payment

现在我想选择books 中是否有任何记录具有类似的(select * from a like a.field like '%blabla%) title 甚至相同的title 但在payment 中不存在

我试过不存在,但我不确定,因为执行查询过程很长,所以我认为不是这样。

【问题讨论】:

  • “相似(喜欢)”是什么意思?
  • select * from a where a.field like '%blabla%'
  • 这里的大多数人希望样本表数据和预期结果为格式化文本,而不是图像。
  • 即使执行的查询过程很长这并不意味着查询是错误的。发布您尝试过的内容。

标签: mysql sql select subquery not-exists


【解决方案1】:

鉴于信息,我试图整理一个例子。我希望这对您有所帮助,并让您接近您想要的。


CREATE TABLE books
    (`number` int, `verification_date` date, `title` varchar(6))
;
    
INSERT INTO books
    (`number`, `verification_date`, `title`)
VALUES
    (14116299, '2020-05-01 18:00:00', 'Title1'),
    (12331189, '2020-07-01 18:00:00', 'Title2'),
    (13123321, NULL, 'Title4'),
    (12318283, '2020-12-31 18:00:00', 'Title3'),
    (12318284, '2021-01-31 18:00:00', 'Title2')
;



CREATE TABLE payments
    (`number` int, `title` varchar(6), `pay_date` date)
;
    
INSERT INTO payments
    (`number`, `title`, `pay_date`)
VALUES
    (14116299, 'Title1', '2020-05-01 18:00:00'),
    (12318283, 'Title3', '2020-12-31 17:00:00')
;

我们从账簿中选择所有列,并仅保留付款表中不匹配的记录。更多信息:How to select rows with no matching entry in another table?。然后添加了一个额外的 where 子句来搜索书籍表中的标题。

SELECT b.*
FROM books b
LEFT JOIN payments p ON b.number = p.number
WHERE p.number is NULL
    AND b.title LIKE'%2'

输出:

number  verification_date   title
12331189    2020-07-01      Title2
12318284    2021-01-31      Title2

SQL Fiddle

【讨论】:

    猜你喜欢
    • 2014-09-09
    • 2018-07-13
    • 2020-10-09
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 2023-03-26
    相关资源
    最近更新 更多