【问题标题】:Select all records from one table where response is any and select record from other table where response is no从一个响应为任何的表中选择所有记录,并从另一个响应为无的表中选择记录
【发布时间】:2020-07-16 05:41:48
【问题描述】:

我正在使用以下查询,但这并不完整。

select whatsapp_user_contact.*, whatsapp_task.is_intimation_sent, whatsapp_task.is_ots_sent, whatsapp_task.is_ndc_sent, whatsapp_task.ndc_media_template_date,
whatsapp_task.ots_media_template_date,whatsapp_task.intimation_media_template_date
FROM whatsapp_user_contact
left join whatsapp_task on whatsapp_user_contact.loan_account_no = whatsapp_task.loan_account_no
where whatsapp_user_contact.sms_timestamp like
'05/06/19%'
order by whatsapp_user_contact.recordid asc;

我有两张桌子。我想从一个响应为 yes、no 或 null 的表中选择所有记录,但我不想从响应为 no 的其他表中选择记录。

【问题讨论】:

  • 您已经标记了 2 个完全不同的数据库产品...是哪一个?
  • 我们还需要一些样本数据和预期结果。
  • 我强烈建议您学习表别名 - 它们将使您的查询更具可读性。

标签: sql-server oracle oracle10g


【解决方案1】:

看看这是否有帮助:

select u.*, 
  t.is_intimation_sent, 
  t.is_ots_sent, 
  t.is_ndc_sent, 
  t.ndc_media_template_date,
  t.ots_media_template_date,
  t.intimation_media_template_date
FROM whatsapp_user_contact u 
     left join whatsapp_task t on u.loan_account_no = t.loan_account_no
where trunc(u.sms_timestamp) = date '2019-06-05'           --> dates aren't "like" anything
  and (u.response in ('yes', 'no') or u.response is null)  --> 1st table's responses
  and t.response <> 'no'                                   --> 2nd table's responses
order by u.recordid asc;

如果SMS_TIMESTAMP 列的数据类型是DATE,则不要将其与字符串进行比较(因为'05/06/19%' 是字符串,而不是日期),并且不要使用like 来对抗它。在这个例子中,我将它截断,这意味着只有 date 组件会被使用; 时间将被“删除”,设置为00:00:00

根据表描述,如果sms_timestamp 列上有索引,这可能不是最佳 选项。可以修复,没问题;为简单起见,我将按原样保留它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2020-12-28
    • 2021-01-26
    • 1970-01-01
    • 2021-08-05
    • 2012-01-23
    • 1970-01-01
    相关资源
    最近更新 更多