好吧所以我有一张桌子,在这张桌子上有两列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 |
答案 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 *相同的内容,因为行已经是不同的。
您可以添加信息以清除您要执行的操作吗?