sql查询 表中一列不重复 显示多列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql查询 表中一列不重复 显示多列相关的知识,希望对你有一定的参考价值。

表:data
lx na ys
鞋 大号 红
帽子 大号 黑
裤子 大号 蓝
鞋 中号 黑
帽子 中号 红
约束其中列不重复,同时显示其他列
结果如(约束ys):
lx na ys
鞋 大号 红
帽子 大号 黑
裤子 大号 蓝

或(约束na):
lx na ys
鞋 大号 红
鞋 中号 黑
用distinct只能显示约束的一列,如何能得到以上例子的效果?

参考技术A CREATE TABLE data (
lx varchar(10),
na varchar(10),
ys varchar(10)
);

INSERT INTO data
SELECT '鞋', '大号', '红' UNION ALL
SELECT '帽子', '大号', '黑' UNION ALL
SELECT '裤子', '大号', '蓝' UNION ALL
SELECT '鞋', '中号', '黑' UNION ALL
SELECT '帽子', '中号', '红';

SELECT
*
FROM
data
WHERE
NOT EXISTS (
SELECT 1
FROM data sub
WHERE data.ys = sub.ys AND data.lx < sub.lx
)

lx na ys
鞋 大号 红
裤子 大号 蓝
鞋 中号 黑

SELECT
*
FROM
data
WHERE
NOT EXISTS (
SELECT 1
FROM data sub
WHERE data.na = sub.na AND data.lx < sub.lx
)

lx na ys
鞋 大号 红
鞋 中号 黑

SQL Server 2008 Express 版本下运行通过.本回答被提问者采纳

sql将一个表中的某一列数据更新到另一个表中

代码如下
update a set a.latesprice = b.amount from T_CONDETAILED a,(select b.amount from t_temp b) b where b.conNo=a.conNumber)
报的错误是:
Caused by: java.sql.SQLException: ORA-00933: SQL command not properly ended

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:330)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:287)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:744)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:206)
at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:956)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1169)
at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1695)
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1661)
at com.kingdee.bos.sql.shell.KDStatement.execute(KDStatement.java:360)
at com.apusic.jdbc.adapter.StatementHandle.execute(Unknown Source)
at com.kingdee.eas.util.app.DbUtil.execute(DbUtil.java:255)
... 21 more
帮帮忙,我看了好久不知错在哪
update a set a.latesprice = b.amount from T_CONDETAILED a,(select b.amount from t_temp b) b where b.conNo=a.conNumber

方法如图:

SQL语言:

    结构化查询语言(英文简称:SQL)是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

    结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同   数据库系统,,可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。

    1986年10月,美国国家标准协会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准。结构化查询语言有五种数据类型: 字符型、文本型、数值型、逻辑型和日期型。

参考技术A --正确SQL
update a
set a.latesprice = (select b.amount
from t_temp b
where b.conNo = a.conNumber)
where a.conNumber in (select b.conNo from t_temp b )
;
--测试数据 临时表
create table temp_x as
select 1 as c_id, 1.1 as c_amount from dual
union all
select 2 as c_id, 1.2 as c_amount from dual
;
create table temp_y as
select 1 as c_id, 1.43 as c_amount from dual
union all
select 2 as c_id, 1.44 as c_amount from dual
;
--测试更新语句
update temp_x a
set a.c_amount = (select b.c_amount
from temp_y b
where b.c_id = a.c_id)
where a.c_id in (select b.c_id from temp_y b)
;
--查询更新结果
select * from temp_x
参考技术B Oracle数据库没有update from 语句,这是SQLServer里面的,就不要想这个了,Oracle可以用另外的方式实现。
我根据你的语句改了下
update T_CONDETAILED a set a.latesprice = (select b.amount from t_temp b where b.conNo=a.conNumber)
你可以试试
参考技术C UPDATE T_CONDETAILED
SET latesprice=t_temp.amount
FROM t_temp
WHERE T_CONDETAILED.conNumber=t_temp.conNo

以上是关于sql查询 表中一列不重复 显示多列的主要内容,如果未能解决你的问题,请参考以下文章

sql中如何使一列中的多个重复数据只显示一次, 求大神指导,使得图中的班简名重复的只显示一次。

sql 查询 一个表中某几列数据

SQL索引--基础理论

sql 查询表格中多列重复的数据并显示该表的其他列

SQL Server 一列或多列重复数据的查询,删除

SQL 如何取出数据库中一列的所有值.....