select mysql返回0行

t30tvxxf  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(468)

我有如下问题:

SELECT 
  lp - prev_close_price AS ch,
  (lp - prev_close_price) / prev_close_price AS chp,
  short_name,
  exchange,
  description,
  lp,
  IFNULL(ask, 0) AS ask,
  IFNULL(bid, 0) AS bid,
  IFNULL(ask - bid, 0) AS spread,
  IFNULL(open_price, prev_close_price) AS open_price,
  IFNULL(high_price, prev_close_price) AS high_price,
  IFNULL(low_price, prev_close_price) AS low_price,
  prev_close_price,
  volume
FROM
  metaTQEjY,
  lpTQEjY,
  askTQEjY,
  bidTQEjY,
  open_todayTQEjY,
  highlowTQEjY,
  prevcloseTQEjY;

它返回0行,而所有表肯定都有值。
然后我试了这个

SELECT 
  prevcloseTQEjY.prev_close_price
FROM
  metaTQEjY,
  lpTQEjY,
  askTQEjY,
  bidTQEjY,
  open_todayTQEjY,
  highlowTQEjY,
  prevcloseTQEjY;

仍为0行。但是

SELECT 
  prevcloseTQEjY.prev_close_price
FROM
  prevcloseTQEjY;

正确返回上一个收盘价。为什么会这样?

5ktev3wc

5ktev3wc1#

当您在from子句中列出所有表时,它将生成这些表的笛卡尔积。此链接是关于两个表的笛卡尔积的附加信息
如果您选择的是您知道存在的特定数据,这是很好的。但是,如果其中一个表为空,笛卡尔积将返回一个空集。
这里有一个sql的小提琴:三个表,一个是空的
如您所见,共有三个表,我从一个表中选择了一个值,但由于from语句包含所有三个表(包括一个空表),因此没有可供选择的数据,因此它返回0行。
但是在本例中:两个表仅包含数据
我选择了相同的列,但是我的from语句只有包含数据的表,这些表按预期返回行。
修复查询的方法有很多种,其中一种方法可能是使用左连接,如下面的回答所述:当一个表为空时选择多个表

g0czyy6m

g0czyy6m2#

您正在执行这些表的笛卡尔积。如果其中一个是空的,就得到一个空集。

相关问题