SQL练习题:麻烦看下查询where语句有什么问题?

image.png

佩奇要努力 发布于 2021-9-8 11:34 (编辑于 2021-9-8 14:06)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共7回答
最佳回答
0
RacloLv2见习互助
发布于2021-9-8 16:01(编辑于 2021-9-8 16:02)

四张表用LEFT join操作后丢失了一部分,说明是至少其中一张表不完整。依次跑下面四个脚本,对应哪次有问题就是对应新LEFT JOIN进来的哪张表数据残缺(即,WHERE那句上面的那张表)。

SELECT 订单.`订单ID` 

FROM 订单

WHERE 订单.`订单ID` IN ( "10248", "10254" );

GO

SELECT 订单.`订单ID` 

FROM 订单

LEFT JOIN 运货商 ON 订单.`运货商` = 运货商.`运货商ID`

WHERE 订单.`订单ID` IN ( "10248", "10254" );

GO

SELECT 订单.`订单ID` 

FROM 订单

LEFT JOIN 运货商 ON 订单.`运货商` = 运货商.`运货商ID`

LEFT JOIN 订单明细 ON 订单.`订单ID` = 订单明细.`订单ID`

WHERE 订单.`订单ID` IN ( "10248", "10254" );

GO

SELECT 订单.`订单ID` 

FROM 订单

LEFT JOIN 运货商 ON 订单.`运货商` = 运货商.`运货商ID`

LEFT JOIN 订单明细 ON 订单.`订单ID` = 订单明细.`订单ID`

LEFT JOIN 产品 ON 订单明细.`产品ID` = 产品.`产品ID` 

WHERE 订单.`订单ID` IN ( "10248", "10254" );

GO

最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-9-8 11:35

image.png 后面的;全删了

  • 佩奇要努力 佩奇要努力(提问者) 要显示其他表单中的字段呀,所以才连接的
    2021-09-08 11:38 
  • Z4u3z1 Z4u3z1 回复 佩奇要努力(提问者) 后面的 ; 全删了...............................
    2021-09-08 11:40 
  • Z4u3z1 Z4u3z1 回复 佩奇要努力(提问者) 加了 ; 后面又是一条新的SQL了,和分号前没关系了
    2021-09-08 11:41 
  • 佩奇要努力 佩奇要努力(提问者) 回复 Z4u3z1 去掉分号仍然不行啊
    2021-09-08 11:46 
  • Z4u3z1 Z4u3z1 回复 佩奇要努力(提问者) 后面的 订单id in 改成 `订单ID` in(\'10248\',\'10245\')
    2021-09-08 11:49 
最佳回答
0
清风TLv6初级互助
发布于2021-9-8 11:37(编辑于 2021-9-8 11:43)

"" 符号是不是要换成 '' 符号

而且你后面的分号已经把语句在第二行就结束了

最佳回答
0
霜凡Lv5中级互助
发布于2021-9-8 11:38(编辑于 2021-9-8 12:00)

分号是结束sql语句,你这里面加了这么多分号。因为第一个分号在第二行,所以只有前面两行执行成功

--------

纯新手啊,把where  后面的订单ID,改成【订单.订单ID】

image.png

in  里面的ID值还是要用enter键旁边的单引号,别用esc底下的那个键

最佳回答
0
Rose_RubyLv6初级互助
发布于2021-9-8 11:41(编辑于 2021-9-8 14:36)

你的这条SQL语句只执行到第2行就结束了,将left join后面的分号去掉,分号放在最后一条那,这样子就能识别到一分号为结束符的一段sql还有你的where 订单id 最好换成 xxx.订单id

image.png

答案:

SELECT

a.`订单ID`,公司名称,产品名称 

FROM

订单 a

LEFT JOIN 运货商 b ON a.`运货商` = b.`运货商ID`

LEFT JOIN 订单明细 c ON a.`订单ID` = c.`订单ID`

LEFT JOIN 产品 d ON c.`产品ID` = d.`产品ID` 

WHERE

a.`订单ID` IN ( "10248", "10254" );

image.png

  • 佩奇要努力 佩奇要努力(提问者) 按照跟你一样的格式做的,为了检验哪条有错加的分号,发现在LEFT JOIN连接完就没有ID10248和10254的行了
    2021-09-08 13:18 
  • Rose_Ruby Rose_Ruby 回复 佩奇要努力(提问者) ` \'\' \' 这是三种符号,字符串用单双引号,别用Navicat生成的那个
    2021-09-08 13:48 
  • Rose_Ruby Rose_Ruby 回复 佩奇要努力(提问者) 而且你的截图里分号要放到最后面,你这样where条件压根就不成立
    2021-09-08 13:51 
  • Rose_Ruby Rose_Ruby 回复 佩奇要努力(提问者) 以分号作为结束符则表示在结束符前的一串代码认为是一段
    2021-09-08 13:53 
  • 佩奇要努力 佩奇要努力(提问者) 回复 Rose_Ruby 改了单引号还是不行,加分号只是检验一下LEFT JOIN后的表是什么样的,发现连接后的表没有10248和10254的ID了
    2021-09-08 14:05 
最佳回答
0
snrtuemcLv8专家互助
发布于2021-9-8 11:45

image.png

  • 佩奇要努力 佩奇要努力(提问者) 改了,还是不行
    2021-09-08 11:48 
  • snrtuemc snrtuemc 回复 佩奇要努力(提问者) 你的截图,还是双引号啊,没改单引号啊
    2021-09-08 11:49 
  • 霜凡 霜凡 回复 佩奇要努力(提问者) 上面的那个点不是引号,引号要用enter键左边的那个
    2021-09-08 11:55 
  • Rose_Ruby Rose_Ruby 回复 霜凡 报错信息已经很明显了,where 订单id的这个订单id有问题,因为你的订单有两张表表,一个是订单表,一个是订单详情表,没有指定按那个表进行过滤
    2021-09-08 11:57 
  • 霜凡 霜凡 回复 Rose_Ruby 不是,你看下他的in 里面的ID值,他用的不是引号
    2021-09-08 11:59 
最佳回答
0
feiluLv4见习互助
发布于2021-9-8 13:23

你把where 后面,()改成('10248','10254'),用``就会把这两个字符串认成列名了

  • 佩奇要努力 佩奇要努力(提问者) 嗯,已改,现在的问题就是四张表用LEFT join操作后丢失了一部分,导致where查找不到
    2021-09-08 13:41 
  • 7关注人数
  • 567浏览人数
  • 最后回答于:2021-9-8 16:02
    请选择关闭问题的原因
    确定 取消
    返回顶部