【问题标题】:SQL requery same tableSQL重新查询同一张表
【发布时间】:2020-03-08 15:28:32
【问题描述】:

我有一张包含大量信息的表格:

部件号、类别、值、FreqL、FreqH、FREQ1、FREQ2。

我正在尝试根据用户条目进行过滤...假设他们输入了零件号“xzy”

SELECT backup.Value, backup.FREQ1, backup.FREQ2
FROM backup
WHERE ((backup.[Part Number]) ="xyz";

我想重新查询表,但还包括适合 xyz 查询产生的所有相同值的部分。

我想在我的子查询之前使用 IN,但这仅限于一列,我如何做到这三个?

下面当然不行>

SELECT backup.[Part Number], backup.Value, backup.FreqL, backup.FreqH
FROM backup 
WHERE (backup.Value AND backup.FREQ1 AND Backup.FREQ2) (
   SELECT backup.Value, backup.FREQ1, backup.FREQ2, backup.CAT
   FROM backup
   WHERE ((backup.[Part Number]) ="xyz") 
);

感谢任何帮助。

谢谢。

JR

【问题讨论】:

  • 要么执行 EXISTS 而不是 IN,要么执行自联接。

标签: sql filter subquery


【解决方案1】:

我猜你需要下面的查询 -

SELECT B1.[Part Number], B1.Value, B1.FreqL, B1.FreqH
FROM backup B1
JOIN (SELECT Value, FREQ1 , FREQ2
      FROM backup
      WHERE [Part Number] ="xyz") B2 ON B1.Value = B2.Value
                                     AND B1.FREQ1 = B2.FREQ1 
                                     AND B1.FREQ2 = B2.FREQ2;

【讨论】:

  • 我更喜欢加入而不是存在。 (如果您没有 db2 中的元组选项)
【解决方案2】:

一个典型的方法使用exists

SELECT b.[Part Number], b.Value, b.FreqL, b.FreqH
FROM backup b
WHERE EXISTS (SELECT 1
              FROM backup b2
              WHERE b2.[Part Number] = 'xyz' AND
                    b2.Value = b.Value AND
                    b2.FREQ1 = b.FREQ1 AND 
                    b2.FREQ2 = b.FREQ2
             );

【讨论】:

    【解决方案3】:

    你没有说你的平台,在 DB2 元组中工作——像这样:

    SELECT backup.[Part Number], backup.Value, backup.FreqL, backup.FreqH
    FROM backup 
    WHERE (backup.Value, backup.FREQ1, Backup.FREQ2) = (
       SELECT backup.Value, backup.FREQ1, backup.FREQ2
       FROM backup
       WHERE ((backup.[Part Number]) ="xyz") 
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多