【问题标题】:Having two selects statements in one将两个 select 语句合二为一
【发布时间】:2019-03-25 10:52:38
【问题描述】:

我查看了与我相同的其他线程,但他们似乎没有回答我的问题。

我这里有这段代码:

select * from outerbarcodes where not exists (select 1
              from bridgebarcodes
              where bridgebarcodes.barcode = outerbarcodes.barcode
             )
             union SELECT productcode, Brand, product, size, barcode FROM outerbarcodes WHERE
COALESCE(productcode, '') <> '' AND
COALESCE(Brand, '') <> '' AND
COALESCE(product, '') <> '' AND
COALESCE(size, '') <> ''

我不明白为什么UNION 不起作用?

这是我的专栏设置:

表格:桥接条码 列: ID int(11) AI PK 产品代码 varchar(100) 条码 varchar(100)

表格:外部条形码 列: id int(11) AI PK 产品代码 varchar(100) 品牌 varchar(100) 产品 varchar(100) 大小 varchar(100) 条码 varchar(100)

【问题讨论】:

  • 除非我遗漏了什么,否则第一个选择是 select * 因此它将包含名为 id 的列,但第二个选择仅返回列的子集。你必须合并相似的集合。
  • 你的意思是这样的? select ProductCode, barcode from outerbarcodes where not exists (select 1 from bridgebarcodes where bridgebarcodes.barcode = outerbarcodes.barcode ) union SELECT productcode, Brand, product, size, barcode FROM outerbarcodes WHERE COALESCE(productcode, '') &lt;&gt; '' AND COALESCE(Brand, '') &lt;&gt; '' AND COALESCE(product, '') &lt;&gt; '' AND COALESCE(size, '') &lt;&gt; ''
  • 不分享图片分享文字代码
  • 您的两个选择必须具有相同的列才能在联合中工作
  • 如何修改代码?我试图删除所有具有空值的行并根据两个表显示所有不存在的值

标签: sql mysql-workbench


【解决方案1】:

UNION的2个查询必须有相同的列数并且列必须是相同的数据类型,所以改成这样:

select productcode, Brand, product, size, barcode from outerbarcodes where not exists (select 1
              from bridgebarcodes
              where bridgebarcodes.barcode = outerbarcodes.barcode
             )
             union SELECT productcode, Brand, product, size, barcode FROM outerbarcodes WHERE
COALESCE(productcode, '') <> '' AND
COALESCE(Brand, '') <> '' AND
COALESCE(product, '') <> '' AND
COALESCE(size, '') <> ''

【讨论】:

    猜你喜欢
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    相关资源
    最近更新 更多