【问题标题】:Join multiple tables with few condition and without relationship加入多个条件很少且没有关系的表
【发布时间】:2018-12-21 02:59:42
【问题描述】:

这已在下面自我回答:

对不起各位,我的查询和你的查询都没有错,这只是我在读取数据时犯的愚蠢错误,我没有与第二个表相关的任何数据,所以它是空的。


我在连接表以从多个表中获取一些结果时遇到问题。我有多个表没有这样的关系:

订单:

Id . Name 
---------
1  . abc
2  . def

订单详情

Id . OrderId . Value
---------------------
1  .    1    .   35
2  .    1    .   24 
3  .    2    .   45   

我想从OrderDetail得到一些结果,但条件必须在Order,像这样:

SELECT od.* 
FROM Order o, OrderDetail od 
WHERE o.id = od.OrderId AND o.name = 'abc';

我希望结果会是这样的

OrderDetail

Id . OrderId . Value
1  .    1    .   35
2  .    1    .   24 

但我没有从结果中得到任何结果,但如果我运行;

SELECT od.* 
FROM Order o, OrderDetail od 
WHERE o.id = od.OrderId;

我仍然得到整个结果,我的 2 个表彼此没有任何关系。

【问题讨论】:

  • 请提供minimal reproducible example--我们可以剪切、粘贴和运行。 PS One 不需要知道 FK 或任何其他约束即可查询。 PS“我需要第二张表中的结果与第一张表的条件”(来自您的评论)不清楚。使用足够多的单词和句子以及对部分示例的引用以保持清晰。
  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(25 多年前),不鼓励使用它
  • ANSI SQL 标准仍然包括逗号分隔的隐式连接 - 但不要使用它们!

标签: sql join search


【解决方案1】:

忘记加入。这会返回什么?

select o.*
from orders o
where o.name = 'abc';

我的猜测是它什么也不返回。所以你看到的“abc”并不是真正的“abc”。最可能的问题是隐藏字符。以字符开头和结尾:

where o.name like '%abc%';

这可以帮助您确定是否是问题所在。如果这仍然没有返回任何内容,那么可能在 个字符之间存在问题:

where o.name like '%a%b%c%';

如果这仍然没有返回任何内容,那么“a”、“b”或“c”可能是一个坏字符。除非您查看存储的实际字符,否则这将变得更难弄清楚。

【讨论】:

  • 感谢您的回答,但不是关于角色,我仍然从您的第一个查询中获得我需要的订单项目,但是当我需要第二个表中的结果以及第一个表中的条件时。
【解决方案2】:

对不起,伙计们,我的查询和您的查询都没有错,这只是我在读取数据时犯的愚蠢错误,我没有与第二个表相关的任何数据,所以它是空的。感谢您的宝贵时间

【讨论】:

  • 请考虑删除问题。你仍然可以这样做,虽然它没有被赞成的答案。这个问题很可能被否决。根据How to Ask,无论如何它都应该被关闭和删除,因为这是对重新输入值的简单误解的结果。 (这是需要minimal reproducible example 的原因之一。)
【解决方案3】:

我相信你在追求:

SELECT od.* FROM Order o
JOIN OrderDetail od ON o.id = od.OrderId 
WHERE o.name = 'abc';

【讨论】:

  • 这指定了与问题中的第一个查询相同的结果。查看提问者发布的“答案”。
猜你喜欢
  • 2021-11-10
  • 2018-08-20
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多