【问题标题】:Sql Select not existing record?Sql Select 不存在记录?
【发布时间】:2020-07-27 21:18:40
【问题描述】:

我正在尝试将以下 3 个查询修改为一个具有最终输出的查询。

第一个查询返回 ids 和 Places 列表

Select id,place from Global where status='Y';

查询示例输出:-

1)123,德里

2)345,查谟

3)456,哈里亚纳邦

然后我想把这个输出发送给

Licence 和 DrvingLicence 表进行过滤,如果这两个表中的 id 将 id 从最终输出中排除。

licenceId=id 和drivingLicenceNo=id

Select licenceId from Licence table where state='MO' and licenceid=:id
Select drivingLicenceNo from DrvingLicence table where DOB='12/12/1978' and drivingLicenceNo=:id

Place 仅出现在 "Global" 表中,该表应出现在最终输出中。

最终输出:

1)123,德里

假设许可证表中存在 id=345 并且 DrvingLicence 表中存在 id=456

【问题讨论】:

  • 您使用的是 MySQL 还是 Oracle?
  • 一些示例表数据和预期结果会有所帮助 - 都是格式化文本,而不是图像。 (minimal reproducible example.)

标签: mysql sql oracle oracle11g oracle-sqldeveloper


【解决方案1】:

你能试试这个吗,它对我很有效。最终输出为 123,德里

select * from global g
where not exists (select 1 from Licence l where l.licenceId=g.id and l.state='MO')
and not exists (select 1 from DrvingLicence dl where dl.drivingLicenceNo=g.id and dob=to_date('12121978','ddmmyyyy'))

【讨论】:

    【解决方案2】:

    试试这个

    select 
        id,
        place 
    from Global g
    where status='Y'
    and NOT EXISTS (
        select
            licenceId
        from Licence l
        on g.id = l.licenceId
    )
    OR NOT EXISTS (
        select
            drivingLicenceNo
        from DrvingLicence dl
        on g.id = dl.drivingLicenceNo
    );
    

    【讨论】:

    • 这是否返回唯一记录?如果记录存在于两个表中,它会如何表现?
    • @NightHawk 你应该尝试运行它。
    • 抱歉出现语法错误 您的 SQL 语法有错误;似乎错误就在附近:'on g.id = l.licenceId) OR NOT EXISTS (selectdrivingLicenceNo' 在第 12 行
    • 它的到期时间是“on”。但是查询仍然返回存在于其他表中的记录。
    【解决方案3】:

    也许使用一些 JOINS

    Select g.id,g.place 
      from Global g 
          INNER JOIN Licence li ON g.id != li.id 
          INNER JOIN DrvingLicence dl ON g.id != dl.id 
     WHERE g.status='Y' 
       AND li.state='MO' 
       AND dl.DOB='12/12/1978';
    

    【讨论】:

    • 您好!欢迎来到 SO。下次尝试格式化您的答案(这次我为您完成了,只需检查编辑页面并查看)。您只需要在代码之前添加一个空行(形成任何文本)并在每行代码之前添加四个空格或一个制表符。希望你喜欢。
    • 对不起,这仍然给出了许可证表中的记录。
    • 也许使用其他答案,但不是 OR 而是放置一个 AND,而不是子查询中的 ON 使用 WHERE
    【解决方案4】:

    试试这个吧!

    SELECT * FROM GLOBAL g
    WHERE g.id NOT IN (Select licenceId from Licence table where state='MO',Select drivingLicenceNo from DrvingLicence table where DOB='12/12/1978')
    

    希望它有效..

    【讨论】:

      猜你喜欢
      • 2018-01-19
      • 2021-10-07
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 2014-04-04
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      相关资源
      最近更新 更多