独特的帮助

时间:2009-06-11 15:53:25

标签: mysql

好吧所以我有一张桌子,在这张桌子上有两列ID。我想让其中一个列区别开来,一旦区别于从某个ID的第二列中选择所有这些列。

最初我试过了:

select distinct inp_kll_id from kb3_inv_plt where inp_plt_id = 581;

然而,这首先执行where子句,然后返回不同的值。

可替换地:

select * from (select distinct(inp_kll_id) from kb3_inv_plt) as inp_kll_id where inp_plt_id = 581;

然而,这找不到列inp_plt_id,因为distinct只返回列,而不是整个表。

有什么建议吗?

编辑:

每个kll_id可能有一个或多个plt_id。我想要一个特定的kb3_inv_plt id唯一的kll_id。

| inp_kll_id | inp_plt_id |
|       1941 |      41383 |
|       1942 |      41276 |
|       1942 |      38005 |
|       1942 |      39052 |
|       1942 |      40611 |
|       1943 |       5868 |
|       1943 |       4914 |
|       1943 |      39511 |
|       1944 |      39511 |
|       1944 |      41276 |
|       1944 |      40593 |
|       1944 |      26555 |

3 个答案:

答案 0 :(得分:2)

如果你的意思是“make distinct”,“只挑选inp_kll_id只发生一次”(不是Distinct的SQL语义),这应该有效:

select inp_kll_id
 from kb3_inv_plt
 group by inp_kll_id
 having count(*)=1 and inp_plt_id = 581;

答案 1 :(得分:1)

首先获取所有不同的(以下示例中的别名'a')然后将其连接回具有指定条件的表(在以下示例中为别名'b')。

SELECT      *
FROM        (
            SELECT 
            DISTINCT    inp_kll_id 
            FROM        kb3_inv_plt 
            ) a
LEFT JOIN   kb3_inv_plt b
        ON  a.inp_kll_id = b.inp_kll_id
WHERE       b.inp_plt_id = 581

答案 2 :(得分:0)

  这个表中的

是两列   ID的。我想做一个   列不同,一旦它是   不同于从中选择所有这些   某个ID的第二列。

SELECT distinct tableX.ID2
FROM tableX
WHERE tableX.ID1 = 581

我认为你对不同的理解可能与它的运作方式不同。这确实会首先应用where子句,然后获取tableX.ID2的唯一条目的明确列表,这正是您在问题的第一部分中要求的。

通过使行不同,您确保没有其他行完全相同。您没有使列不同。假设你的表有这些数据:

ID1   ID2
10    4
10    3
10    7
4     6

当您选择不同的ID1,ID2时 - 您将获得与select *相同的内容,因为行已经是不同的。

您可以添加信息以清除您要执行的操作吗?