2

我正在使用 SQL Server。

我有一张item_table这样的桌子:

item   age
--------------    
1      1 
1      6 
2      2    

我有另一个price_table这样的表:

item    pricetype    price
--------------------------    
1       O             5
1       P             6
1       V             7
2       O             8
2       P             9
2       V             10

所以,我想在两个表上进行内部连接。

select *
from item_table i
inner join price_table p
on ...

有一些条件on

  1. 如果一个项目的平均年龄大于3,那么我会:inner join price_table on pricetype = 'O' or pricetype = 'P'
  2. 如果没有,那么我这样做:inner join price_table on pricetype = 'O' or pricetype = 'P' or pricetype = 'V'

所以有条件on有条件。

如何编写选择查询?

编辑: 我将条件更改为平均年龄,而不是type

4

3 回答 3

7
select i.item, i.type, p.pricetype, p.price
from item_table i
inner join price_table p on i.item = p.item 
    and (i.type = 1 and p.pricetype in ('O', 'P'))
        or (i.type = 2 and p.pricetype in ('O', 'P', 'V'))

SQL 小提琴示例

输出:

| ITEM | TYPE | PRICETYPE | PRICE |
-----------------------------------
|    1 |    1 |         O |     5 |
|    1 |    1 |         P |     6 |
|    2 |    2 |         O |     5 |
|    2 |    2 |         P |     6 |
|    2 |    2 |         V |     7 |
|    2 |    2 |         O |     8 |
|    2 |    2 |         P |     9 |
|    2 |    2 |         V |    10 |
于 2012-11-06T14:38:26.747 回答
0

我会把它放在where条款中,我自己,比如:

select *
from item_table i
inner join price_table p on 
i.item = p.item
where
(pricetype in ('O', 'P'))
    or (type = 2 and pricetype in ('V'))
于 2012-11-06T14:49:22.967 回答
0

一种方法是有一个表来映射两种类型的类型:

itemtype    pricetype
---------------------
1           O
1           P
2           O
2           P
2           V

然后,您可以将此表内部连接到其他两个表。

于 2012-11-06T14:58:46.397 回答