【问题标题】:SQL SELECT multiple Lines where one line is like, MSSQLSQL SELECT multiple Lines where one line is like, MSSQL
【发布时间】:2017-02-08 09:05:11
【问题描述】:

以下设置:

t1

ID     Name      Price
1      Miller    50      
2      Smith     10
3      Someone   20

t2

ID    Item    Price
1     10.1    25
1     10.2    25
2     32.1    10
3     32.1    10
3     11.1    2
3     12.2    3
3     43.2    5

我要做的是从第二个表中选择所有条目,其中一个是 11.1。我正在使用这个查询:

SELECT
t1.ID
t1.Name
t2.Item

FROM t1 
JOIN t2 on t1.ID = t2.ID
WHERE t2.item in ('11.1)

我应该得到以下结果:

ID     Name    Item
3      Someone 31.1
3      Someone 11.1
3      Someone 12.2
3      Someone 43.2

但是因为我在特定项目上做了“哪里”,所以我只得到一行。当只有 1 行与“11.1”匹配时,如何从 t2 获取所有行?

【问题讨论】:

  • 使用 MSSQL 服务器
  • 这应该返回 1 行。我不明白你想要什么?
  • 您是否需要特定 ID 的所有项目,其中至少有一个项目 = '11.1'?
  • 是的,这是一个 SAP 环境,第一个表用于订单。第二个指定列出所有已售商品的订单。请求是按包含指定项目的顺序列出所有项目
  • 因此,如果匹配项目属于该订单,则您需要整个订单的详细信息。我说的对吗?

标签: sql sql-server join where


【解决方案1】:

试试这个...

首先您需要获取等于'11.1' 的项目ID 列表,然后您可以从列表中获取表t2 中的数据。您需要加入t1才能获得name

Select 
   t2.ID, 
   t1.name Name, 
   t2.item Item
from t1 
join t2 
on t1.ID= t2.ID
where t2.ID in (select ID from t2 where item = '11.1')

【讨论】:

    【解决方案2】:

    您应该使用子查询来获取与您的条件首先返回的具有相同 id 的所有元素。

    SELECT 
      t2.ID, t2.Item, t1.Name
    FROM 
      t1
    JOIN
      t2
      ON t2.ID = t1.ID
    WHERE t2.ID in (SELECT ID FROM t2 WHERE t2.item in ('11.1'))
    

    【讨论】:

      猜你喜欢
      • 2011-04-06
      • 2015-05-01
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 2015-08-01
      • 2021-03-02
      相关资源
      最近更新 更多