【问题标题】:Not showing tables with Null value when i select *当我选择 * 时不显示具有 Null 值的表
【发布时间】:2020-02-09 03:10:05
【问题描述】:

当我尝试从我创建的表中选择 * 时,我在其中插入了一个空值。包含空值的整行数据将被省略;

CREATE TABLE Credit_transactions (
CT_id INT PRIMARY KEY,
Date_time DATE,
Money INT ,
Credits INT  ,
CT_type INT ,
Customer_id INT );

例如,如果一笔交易不包含任何钱,我将在插入数据时插入一个空值,例如;

INSERT INTO Credit_transactions(CT_id, Date_time, Money, Credits, CT_type, Customer_id)
VALUES('2', '10-DEC-2018', 'NULL', '3', '1', '1');

然而,在插入所有数据并尝试select * from the table 后,我只得到没有空值的行,例如我键入的 id 1,2 和 3 id2 在其中一列中包含空值,我只会得到 id1和全选后的id3。

我该如何解决这个问题,我想将值显示为空值,例如;

id:1 money:10
id:2 money:NULL
id:3 money 20

第一次使用堆栈溢出,对于这样的初学者问题感到抱歉。

【问题讨论】:

  • 包含'NULL'的值可能插入失败并且在表中不存在。而不是插入 NULL,而是在仅接受整数的字段中插入字符串“NULL”。所以很可能会失败。
  • 除了已经指出的错误使用字符串“NULL”(单引号)与 NULL 指示符(不带引号的 NULL 词),您使用根据 NLS_DATE_FORMAT 的系统/会话设置,插入 DATE 列的字符串可能会出现问题。仅显示日期的字符串表示形式绝不是一个好主意,并期望 Oracle 在将其转换为内部 DATE 时神奇地知道如何解释该格式。始终使用 to_date() 函数,以便您始终完全控制。
  • “NULL”的错误使用会产生一个错误,这应该是一个非常有力的线索。至少您应该将其包含在问题描述中。
  • 另外,您将'10-DEC-2018' 插入date 列。在 Oracle 中,语法是 like this
  • 不显示“表格”,或不显示?我很想编辑您的帖子以更正标题,但我不确定您的意思是否可能与“不显示行”不同。请澄清。

标签: mysql sql oracle


【解决方案1】:

Money 列被声明为INT,并且您尝试插入字符串值'NULL' 而不是NULL,因此sql 查询将失败(插入)。
所以很明显,从表格中选择所有内容时,您不会得到预期的结果。

【讨论】:

    【解决方案2】:

    您只在表格中插入了一行。这就是为什么您在结果集中只得到一行。

    如果您想要表格中没有的行,则需要left join 之类的东西。您要么需要一个包含所需值的表,要么在表中创建一个:

    select x.ct_id, ct.money
    from (select 1 as ct_id from dual union all
          select 2 as ct_id from dual union all
          select 3 as ct_id from dual
         ) x left join
         Credit_transactions ct
         on ct.ct_id = x.ct_id
    

    【讨论】:

      猜你喜欢
      • 2013-09-15
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      相关资源
      最近更新 更多