Checking whether an item does not exist in another table

前端 未结 4 1326
失恋的感觉
失恋的感觉 2020-12-15 16:07

My tables are set up something like this:

table name: process
fields: name, id_string

table name: value_seach
fields: id_string, value

I w

相关标签:
4条回答
  • 2020-12-15 17:00

    The query you want should look something like this. Note that a JOIN will be significantly faster than a subquery in the WHERE clause.

    SELECT p.name, p.id_string
    FROM process p
    LEFT OUTER JOIN value_search v
       ON p.id_string = v.id_string
       AND p.id_string IS NOT NULL
       AND v.id_string IS NULL
    

    An equally valid variant of the query above would be:

    SELECT p.name, p.id_string
    FROM process p
    LEFT OUTER JOIN value_search v
       ON p.id_string = v.id_string
    WHERE
       p.id_string IS NOT NULL
       AND v.id_string IS NULL
    
    0 讨论(0)
  • 2020-12-15 17:03

    In general if you want rows that don't exist in another table, then LEFT JOIN the other table and WHERE ... IS NULL to a column on the second table. Also you mentioned that you don't want rows where process.id_string is NULL.

    SELECT p.name, p.id_string
    FROM
        process p
        LEFT JOIN value_search v
            ON v.id_string = p.id_string
    WHERE
        v.id_string IS NULL
        AND p.id_string IS NOT NULL
    

    This is known as an anti-join.

    0 讨论(0)
  • 2020-12-15 17:04

    I believe using Not Exists would be your best option here.

    SELECT p.name, p.id_string
    FROM process p
    WHERE 
       NOT p.id_string IS NULL AND
       NOT EXISTS(
              SELECT NULL
              FROM value_search v
              WHERE p.id_string = v.id_string)
    
    0 讨论(0)
  • 2020-12-15 17:09
    SELECT 
      name,
      id_string
    FROM process
    WHERE id_string IS NOT NULL AND id_string NOT IN SELECT id_string FROM value_seach
    
    0 讨论(0)
提交回复
热议问题