当前位置: 首页 > 知识库问答 >
问题:

mysql - 如何使用EXISTS关键字检查两个表中是否存在对应的值?

邴俊友
2024-08-23

找出两个表是否出现了对应的值,
打算使用exists关键字:
两个表:
第一张主表:

select pn_Code,serialNumber from pnassertbasic_ruku pr left join pnassertruku pu on pr.parent_pnAssertRuku_id = pu.child_pnAssertRukuDetails_id 
where pn_Code is not null and serialNumber is not null and DATE(pr.create_time) = CURDATE() and pr.warehouseEntryNumber <> 'WEd3791f0b'

第二张子表:

select pn_Code,serialNumber from pnassertbasic_ruku pr left join pnassertruku pu on pr.parent_pnAssertRuku_id = pu.child_pnAssertRukuDetails_id 
where pu.child_pnAssertRukuDetails_id is null and pr.warehouseEntryNumber = 'WEd3791f0b'

想查看子表中中的内容是否出现在主表中???

写完后就报错了,咨询下大佬们如何用查询主表中是否出现了子表的内容????

我是这么写的:写完后运行报错(报错日志在最下边)

select * from (
    select pn_Code,serialNumber from pnassertbasic_ruku pr left join pnassertruku pu on pr.parent_pnAssertRuku_id = pu.child_pnAssertRukuDetails_id 
where pn_Code is not null and serialNumber is not null and DATE(pr.create_time) = CURDATE() and pr.warehouseEntryNumber <> 'WEd3791f0b'
) as temp1 
where EXISTS (
    selet * from (
    select pn_Code,serialNumber from pnassertbasic_ruku pr left join pnassertruku pu on pr.parent_pnAssertRuku_id = pu.child_pnAssertRukuDetails_id 
where pu.child_pnAssertRukuDetails_id is null and pr.warehouseEntryNumber = 'WEd3791f0b'
    ) as temp2
    where temp1.pn_Code <> temp2.pn_Code and temp1.serialNumber <> temp2.serialNumber 
)

报错日志:

SQL 错误 [1064] [42000]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'selet * from (
    select pn_Code,serialNumber from pnassertbasic_ruku pr left ' at line 6
错误位置: line: 5

共有2个答案

丌官信厚
2024-08-23

你的 select 单词拼写错误了
image.png

太叔栋
2024-08-23

在您的SQL查询中,存在几个问题需要解决。首先,您的EXISTS子查询中的SELECT语句拼写错误(selet 应该是 SELECT)。其次,您的EXISTS子查询的逻辑可能并不符合您的需求,因为您正在检查temp1temp2中的pn_CodeserialNumber是否不相等,这通常不是检查一个表中的数据是否存在于另一个表中的方法。

您的目标是检查子表(即pu.child_pnAssertRukuDetails_id is nullpr.warehouseEntryNumber = 'WEd3791f0b'的记录)中的pn_CodeserialNumber是否也存在于主表(即您的第一个查询结果)中。以下是一个修正后的查询示例:

SELECT *
FROM (
    SELECT pn_Code, serialNumber
    FROM pnassertbasic_ruku pr
    LEFT JOIN pnassertruku pu ON pr.parent_pnAssertRuku_id = pu.child_pnAssertRukuDetails_id
    WHERE pn_Code IS NOT NULL 
      AND serialNumber IS NOT NULL 
      AND DATE(pr.create_time) = CURDATE() 
      AND pr.warehouseEntryNumber <> 'WEd3791f0b'
) AS temp1
WHERE EXISTS (
    SELECT 1
    FROM pnassertbasic_ruku pr2
    LEFT JOIN pnassertruku pu2 ON pr2.parent_pnAssertRuku_id = pu2.child_pnAssertRukuDetails_id
    WHERE pu2.child_pnAssertRukuDetails_id IS NULL
      AND pr2.warehouseEntryNumber = 'WEd3791f0b'
      AND pr2.pn_Code = temp1.pn_Code
      AND pr2.serialNumber = temp1.serialNumber
);

说明:

  1. 子查询中的SELECT 1:在EXISTS子查询中,通常使用SELECT 1(或任何其他常量),因为EXISTS只关心子查询是否返回任何行,而不关心返回哪些列或多少行。
  2. 连接条件:在EXISTS子查询中,我添加了条件来确保pr2.pn_Codepr2.serialNumbertemp1中的对应列相匹配。这样,只有当子表(pu2.child_pnAssertRukuDetails_id IS NULL)中存在与主表相同的pn_CodeserialNumber时,EXISTS才会为真。
  3. 避免重复子查询:如果可能,尝试优化查询以避免在外部查询和EXISTS子查询中重复相同的连接和过滤逻辑。但在这个特定例子中,由于EXISTS子查询的过滤条件与主查询不同,因此可能无法完全避免。

这个修正后的查询应该能够解决您的问题,同时避免语法错误,并正确反映您的查询需求。

 类似资料:
  • 问题内容: 比方说,我有一个关联数组,像这样:。 如何检查字典中是否存在? 问题答案: if key in array: # do something 关联数组在Python中称为字典,您可以在stdtypes文档中了解有关它们的更多信息。

  • 问题内容: 理论上听起来很简单,但是我已经做了很多研究,但很难弄清楚。 我如何检查MySQL表是否存在以及它是否在执行某些操作。(我猜一个简单的php if / else语句可以解决这个问题) 有没有办法做到这一点? 这是我对cwallenpoole的响应所做的: 问题答案: 诚然,它比Python惯用语言更具有Python风格,但另一方面,您不必担心要处理大量额外数据。 编辑 因此,截至我撰写此

  • rank ▲ ✰ vote url 47 435 86 477 url 检查一个键在字典中是否存在 在更新字典之前想检查键是否存在.我写了如下代码: if 'key1' in dict.keys(): print "blah" else: print "boo" 我想这不是最好的方法,还有什么更好的方法? 用in. d = dict() for i in xrange(100):

  • 问题内容: 我正在尝试编写一个查询,该查询将检查MySQL中的特定表是否具有特定列,如果没有,则创建它。否则什么都不做。在任何企业级数据库中,这实际上都是一个简单的过程,但是MySQL似乎是一个例外。 我以为 可以工作,但是失败很严重。有办法吗? 问题答案: 这对我来说很好。 使用PHP就像…

  • 问题内容: 因此,我从服务器获取了一些JSON值,但我不知道是否会有特定的字段。 像这样: 有时,还会有一个额外的字段,例如: 我想检查名为“ club”的字段是否存在,以便在解析时不会得到 org.json.JSONException:club的值 问题答案: JSONObject类具有一个名为“ has”的方法: http://developer.android.com/reference/o

  • 本文向大家介绍如何检测MySQL中是否存在表?,包括了如何检测MySQL中是否存在表?的使用技巧和注意事项,需要的朋友参考一下 要检测表的存在,请使用INFORMATION_SCHEMA.TABLES的概念。以下是语法- 要了解上述语法,让我们创建一个表- 这是检测数据库中是否存在表的查询- 这将产生以下输出-

  • 上面是我正在处理的JSON对象。我想检查键是否存在。我尝试了下面的代码,但它不起作用。有办法实现吗?

  • 问题内容: 我需要帮助检查数据库中是否存在行。就我而言,该行包含一个电子邮件地址。我得到结果: 这是我当前正在使用的代码: 有没有更好的方法来检查MySQL中是否存在行(在我的情况下,检查MySQL中是否存在电子邮件)? 问题答案: 以下是经过尝试,测试和证明的检查行是否存在的方法。 (其中一些我自己使用,或者过去使用过)。 编辑: 我在使用两次的语法中犯了一个先前的错误。请查阅修订版本。 即: