我有一个简单的查询,从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
我的问题有什么问题吗?请告诉我如何解决这个问题(加入)。谢谢
发布于 2022-11-04 10:32:36
你说你没有加入,但实际上你是。更糟的是,你正在做交叉连接。通过像在FROM子句中所做的那样,放置4个表,就可以隐式地将所有4个表连接在一起。
换句话说,连接产生的行数将为202685 * 175642 * 199392 * 174947 =12418359000000000000,这是一个庞大的数字。这就是为什么您的查询没有完成的原因。
也许可以看一下当前正在预览的执行图(我可以在上面的屏幕截图中看到它)--它可能会指示在这里执行的是什么操作。
如果您想要计数每个表中的行数,那么您必须编写4个单独的查询,就像您所做的那样。
UPDATE,作为演示,我有一个包含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行的表。您的查询将生成124183590000000000000000行(正如我前面所说)。
下面是返回6879707136的查询的执行图:
https://stackoverflow.com/questions/74312362
复制相似问题