【问题标题】:How to get different data from two different tables in SQL query?SQL查询中如何从两个不同的表中获取不同的数据?
【发布时间】:2020-01-18 05:08:01
【问题描述】:

我有两个名为 SoftWeb 的表,其中包含多个数据,其中的数据与我想要的数据不同。例如:

在包含 5 个数据的软表中,即

也在包含 5 个数据的 Web 表中,即

现在我想要输出,即

我已经完成了查询,但不幸的是没有成功,让我们看看我的查询,即

SELECT DISTINCT soft.GSTNo AS SoftGST
    ,web.GSTNo AS WebGST
    ,soft.InvoiceNumber AS SoftInvoice
    ,web.InvoiceNumber AS WebInvoice
    ,soft.Rate AS SoftRate
    ,web.Rate AS WebRate
FROM soft
LEFT OUTER JOIN web ON web.GstNo = soft.GSTNo
    AND web.InvoiceNumber = soft.invoicenumber
    AND web.rate = soft.rate

我也申请了内部连接 ​​bt 同样的事情没用。

【问题讨论】:

  • 为什么你的 321 和 121 没有包含在你想要的输出中..
  • @AjeetVerma bcos 321 和 121 是两个表中的通用数据,我想要输出不同的数据

标签: sql sql-server tsql select sql-query-store


【解决方案1】:

你可以通过

;WITH cte_soft AS
    (SELECT * FROM soft 
        EXCEPT 
        SELECT * FROM web) 
    ,cte_web AS
    (SELECT * FROM web
        EXCEPT 
        SELECT * FROM soft)
SELECT *
FROM
  (SELECT gst softgst, NULL webgst, invoice softinvoice, NULL webinvoice, rate softrate, NULL webrate
   FROM cte_soft
   UNION ALL 
   SELECT NULL, gst, NULL, invoice, NULL , rate
   FROM cte_web) tbl
ORDER BY coalesce(softgst, webgst),coalesce(softinvoice,webinvoice)

Fiddle

【讨论】:

  • ,我打算为这个解决方案发布相同的查询,但你先发布......从未来来看,这是一个很好的解决方案......从我这边投票......
【解决方案2】:

你可以使用full join:

SELECT s.gst as softgst, w.gst as webgst,
       s.invoice as softinvoice, w.invoice as webinvoice,
       s.rate as softrate, w.rate as webrate
FROM soft s FULL JOIN
     web w
     ON s.gst = w.gst AND s.invoice = w.invoice AND s.rate = w.rate
WHERE s.gst IS NULL OR w.gst IS NULL
ORDER BY COALESCE(s.gst, w.gst), COALESCE(s.invoice, w.invoice);

没有子查询需要 CTE。这实际上只是您查询的一个轻微变体。

【讨论】:

    猜你喜欢
    • 2019-05-27
    • 1970-01-01
    • 2014-06-10
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 2019-01-07
    • 1970-01-01
    相关资源
    最近更新 更多