如果不匹配,则访问查询默认值

Posted

技术标签:

【中文标题】如果不匹配,则访问查询默认值【英文标题】:Access Query default value if not Match 【发布时间】:2017-04-04 07:06:57 【问题描述】:

如何在 Microsoft Access 中制定查询以从这两个源表生成下面的结果表?

表 1

Item Code
---------
Item 01
Item 02
Item 03

表 2

Item Code | Quotation
----------+----------
Default   |      5000
Item 01   |      1000
Item 02   |      2000

我希望结果表必须是这样的:

结果表

Item Code | Quotation
----------+----------
Item 01   |      1000
Item 02   |      2000
Item 03   |      5000 <== note no matching item code in table 2

【问题讨论】:

调整了措辞和格式。删除 mysql 标记并用 MS Access 标记替换。 【参考方案1】:

我认为将默认值存储在专用表中而不是“投影”其他值会更好:

SELECT t1.ItemCode, t2.Quotation
  FROM Table01 t1,  Table02 t2
  WHERE t1.ItemCode = t2.ItemCode
UNION
SELECT t1.ItemCode, t2.Quotation
  FROM Table01 t1, Table02 t2
 WHERE t2.ItemCode = 'Default'
       AND t1.ItemCode NOT IN ( SELECT ItemCode FROM Table02 );

【讨论】:

【参考方案2】:

试试这个:

SELECT T1.No, T1.ItemCode, T2.Quotation
FROM TABLE01 T1 
INNER JOIN TABLE02 T2 
        ON T1.ItemCode = T2.ItemCode 
        OR (T1.ItemCode <> T2.ItemCode AND T2.ItemCode = 'Default');

【讨论】:

我试过了,但最后一行有一些错误:“缺少(或 [ ....”类似的东西。 我想填充不匹配的行作为默认值 @user7795335 请分享您得到的确切错误以及您正在尝试的内容 嗨。我知道这里有什么问题。 ON后你必须有(),这就是为什么会出现窗口错误。

以上是关于如果不匹配,则访问查询默认值的主要内容,如果未能解决你的问题,请参考以下文章

如何为'where'子句中的项目返回一些默认值,这些项目在数据库表列中不匹配(不存在)

LINQ查询操作符

如果未找到单行,则返回默认值

将 index.html 设为默认值,但如果输入则允许访问 index.php

Sqlite:如果结果为空,则为最大子查询设置默认值

Kettle 值映射