我有一個簡單的查詢,計算 4 個表中的記錄(不加入):
SELECT count(tx._sequence_num) as txc,
count(o._sequence_num) as oc,
count(t._sequence_num) as tc,
count(ol._sequence_num) as olc
FROM `xxx.TAX_TRANSACTIONS` tx,
xxx.ORDER o,
xxx.TRANSACTION t,
xxx.ORDER_LINES ol
它永遠不會向我回傳結果

如果我將它分成 4 個這樣的查詢:
SELECT count(tx._sequence_num) as txc FROM `xxx.TAX_TRANSACTIONS` tx; --202685
SELECT count(o._sequence_num) as oc FROM xxx.ORDER o; --175642
SELECT count(t._sequence_num) as tc FROM xxx.TRANSACTION t; --199392
SELECT count(ol._sequence_num) as olc FROM xxx.ORDER_LINES ol; --174947
它會在 1-2 秒后回傳(右邊的--xxxxxx 是記錄數)
對于這個簡單的連接也是如此,我從來沒有得到結果:
SELECT ol.DEVICE_ID AS VIN,
tx.TAX_LINES AS SKU,
o.USER_ID AS ACCOUNT_DN,
o.ORDER_NUMBER,
cast(t.AMOUNT as FLOAT64)/100 AS TOTAL_AMOUNT ,
t.TRANSACTION_STATUS,
t.TRANSACTION_TYPE,
t.TRANSACTION_TAG,
t.CREATED_ON ,
tx.TAX_CALCULATED,
tx.TRANSACTION_STATUS AS TAX_TXN_STATUS,
tx.ERROR_MESSAGE REMARKS,
tx.TRANSACTION_ID AS TAX_TXN_ID,
tx.TAXATION_TYPE AS TAX_TXN_TYPE,
tx.TRANSACTION_DATE TAX_TXN_DATE
FROM xxx.TAX_TRANSACTIONS tx join
`xxx.ORDER` o on o.ORDER_NUMBER = tx.ORDER_NUMBER join
xxx.TRANSACTION t on o.ORDER_NUMBER = t.ORDER_NUMBER join
xxx.ORDER_LINES ol on o.ID = ol.ORDER_ID
WHERE (t.TRANSACTION_TYPE IN ("purchase") AND t.TRANSACTION_STATUS ="approved" AND tx.TAXATION_TYPE = "SalesInvoice") or
(t.TRANSACTION_TYPE IN ("refund") AND tx.TAXATION_TYPE = "ReturnInvoice") or
(tx.TRANSACTION_STATUS IN ("Error"))
ORDER BY CREATED_ON DESC
我的查詢有問題嗎?請讓我知道如何解決問題(加入)。謝謝
uj5u.com熱心網友回復:
你說你沒有做任何 JOIN,但實際上你是。更糟糕的是,你正在做 CROSS JOIN。通過像您在 FROM 子句中所做的那樣放置 4 個表,您隱式地將所有 4 個表連接在一起。
換句話說,連接產生的行數將是 202685 * 175642 * 199392 * 174947 = 1241835900000000000000,這是一個巨大的數字。這就是您的查詢未完成的原因。
也許看看當前預覽中的執行圖(我可以在上面的螢屏截圖中看到它) - 它可能會指示這里正在執行的操作。
如果您想要對每個表中的行數進行計數,那么您必須撰寫 4 個單獨的查詢,就像您所做的那樣。
更新,作為演示,我有一個有 288 行的表
select count(*)
from `project.dataset.t` a
回傳 288
select count(*)
from `project.dataset.t` a,
`project.dataset.t` b
回傳 82944
select count(*)
from `project.dataset.t` a,
`project.dataset.t` b,
`project.dataset.t` c
回傳 23887872
select count(*)
from `project.dataset.t` a,
`project.dataset.t` b,
`project.dataset.t` c,
`project.dataset.t` d
回傳 6879707136(68 億)。這是一個巨大的數字,這是一個只有 288 行的表。您的查詢將(如上所述)產生 1241835900000000000000 行。
這是我的查詢的執行圖,它回傳 6879707136:

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529138.html
標籤:Google Cloud Collective sql谷歌云平台加入谷歌大查询
