选择mysql返回0行
我有一个类似以下的问题:选择mysql返回0行,mysql,sql,select,Mysql,Sql,Select,我有一个类似以下的问题: 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_
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;
正确返回上一个收盘价。为什么会这样?您正在执行这些表的笛卡尔乘积。如果其中一个为空,则得到一个空集。当您在FROM子句中列出所有表时,它将生成这些表的笛卡尔乘积 如果您选择的是您知道存在的特定数据,那么这很好。但是,如果其中一个表为空,笛卡尔积将返回一个空集 下面是一个SQL版本: 如您所见,共有三个表,我从一个表中选择了一个值,但由于我的from语句包含所有三个表(包括一个空表),因此没有数据可供选择,因此它返回0行 但在本例中: 我选择了相同的列,但我的FROM语句只包含包含数据的表,这将按预期返回行
有很多方法可以修复您的查询,其中一种方法可能是使用左连接,如下面的回答所述:这个怎么样?从metaTQEjY、lpTQEjY、askTQEjY、bidTQEjY、open_todayTQEjY、highlowTQEjY、prevcloseTQEjY中选择prev CloseTQY.prev_close_price;它也不会产生任何结果,但上一个关闭价格绝对不是空的。如果列表中至少有一个空表,则结果集将是空的(就像将数据集“乘以”0)@AlexanderHo
metaTQEjY、lpTQEjY、askTQEjY、bidTQEjY、open\uTodayTQEJY、highlowTQEjY中的一个表,prevcloseTQEjY
集为空。我们谈论的是空表,而不是空属性值。请参阅: