0 0

求sql40

我有一张区域表area:areaid,areaname,propertyid
还有一张设施表property:propertyid,propertyname
现在我有一个需求就是保存在area表里的propertyid是有多个值的,比如说1,2,3这种,现在我想通过一个sql语句来输出我区域里propertyid所对应的propertyname。
我开始是这样写的:
select a.areaid,a.areaname,p.propertyname from area a ,property p where a.propertyid in (select propertyid from property)

但是很明显,不对,不知道有哪位大大知道?注:公司用的是sqlserver,所以最好是能兼容sqlserver的sql写法。如果能够提供oracle的写法,那就更好了,感激不尽!

问题补充:兄弟们,注意propertyid是它是关联property表中的多个propertyid的。

问题补充:
renpeng301 写道

贴下表的数据啊··
···

其实表的数据应该不是很重要把?
area:


property:

2011年8月14日 21:19
  • 大小: 9.2 KB
  • 大小: 17.9 KB

8个答案 按时间排序 按投票排序

0 0

采纳的答案

别整这么些复杂的,既然area中propertyid的ID是多个那么就property中in过去就可以了嘛。
select b.propertyname from property a ,area b where a.propertyid in b.id

行吗? 试试

2011年8月15日 09:32
0 0

 :oops: 那你最后需要的数据结果是:
a.areaid,a.areaname,p.propertyname
1         区域1      设施一,设施二
还是
a.areaid,a.areaname,p.propertyname
1         区域1      设施一
1          区域1     设施二

???、
不管那种方法你得先分坼字符串
sqlserver
create   function    f_splitstr(@SourceSql   varchar(8000),@StrSeprate   varchar(100))   
  returns   @temp   table(F1   varchar(100))   
  as     
  begin   
  declare   @ch   as   varchar(100)   
  set   @SourceSql=@SourceSql+@StrSeprate     
  while(@SourceSql<>'')   
                  begin   
                  set   @ch=left(@SourceSql,charindex(',',@SourceSql,1)-1)   
  insert   @temp   values(@ch)   
  set   @SourceSql=stuff(@SourceSql,1,charindex(',',@SourceSql,1),'')   
                  end   
  return   
  end 

然后对如第二个情况
select a.areaid,a.areaname,p.propertyname 
from area a,property p
where 
 p.propertyid in (select * from dbo.splitstr(a.propertyid,','))   
对如第一个情况

一条语句就难 搞出来了。。。

2011年8月14日 22:49
0 0

结合上面的函数sql大致如下:

select propertyname from property where propertyid in (select * from table(splitstr(select propertyid from area where areaid = ?,',')))  

2011年8月14日 22:04
0 0


贴下表的数据啊··
···

2011年8月14日 21:51
0 0

自己写个字符串拆分函数吧。
oracle的拆分函数如下:

CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000);
CREATE OR REPLACE FUNCTION splitstr(p_string IN VARCHAR2, p_delimiter IN VARCHAR2)
    RETURN str_split 
    PIPELINED
AS
    v_length   NUMBER := LENGTH(p_string);
    v_start    NUMBER := 1;
    v_index    NUMBER;
BEGIN
    WHILE(v_start <= v_length)
    LOOP
        v_index := INSTR(p_string, p_delimiter, v_start);

        IF v_index = 0
        THEN
            PIPE ROW(SUBSTR(p_string, v_start));
            v_start := v_length + 1;
        ELSE
            PIPE ROW(SUBSTR(p_string, v_start, v_index - v_start));
            v_start := v_index + 1;
        END IF;
    END LOOP;

    RETURN;
END splitstr;

这样结合起来使用。参考http://www.cnblogs.com/gnielee/archive/2009/09/09/1563154.html

2011年8月14日 21:46
0 0

用左连接


select a.areaid,a.areaname,p.propertyname from area a left join  property p on a.propertyid = p.propertyid



查询时就是


select a.areaid,a.areaname,p.propertyname from area a left join  property p on a.propertyid = p.propertyid where a.areaid = 'asdf'

2011年8月14日 21:41
0 0


select a.areaid,a.areaname,p.propertyname from area a ,property p where a.propertyid=p.propertyid

这样都行啊··

2011年8月14日 21:40
0 0


select a.areaid,a.areaname,propertyname=(
select propertyid from property p
where p.propertyid=a.propertyid  
) from area a 

2011年8月14日 21:39

相关推荐

    利用MD5 求sql语句中的sql_id

    在IT行业中,数据库管理和性能优化是关键领域,而SQL_ID是Oracle数据库中一个重要的概念,它用于唯一标识SQL语句。SQL_ID是一个14字符的字符串,能够帮助我们跟踪和分析SQL查询的性能。MD5(Message-Digest ...

    求SQL语句

    求SQL语句,祥情见附件

    sql_求比例

    sql_求比例

    SQL数据脚本.txt

    博客《MySQL 数据库基础 学习笔记 0606》对应的 SQL 数据脚本,免费自取。传送门:https://blog.csdn.net/idiot5lie/article/details/117793661

    SQL Server中求素数

    在SQL Server 2005中,通过编写存储过程或脚本来实现特定的功能是一种常见的做法。本篇文章将基于提供的代码片段来详细介绍如何在SQL Server 2005中求解指定范围内的所有素数。 ### SQL Server 2005简介 SQL ...

    用sql语句求出占比,并且后面加%比

    在SQL查询中,有时我们需要计算特定数据的比例,并且在结果显示时加上百分号(%),以直观展示比例关系。本文将详细解析如何通过SQL语句实现这一功能,包括但不限于使用`COUNT()`函数、嵌套查询、类型转换等技术点。...

    mssql sqlserver 使用sql脚本实现相邻两条数据相减.docx

    MSSQL SQL Server 使用 SQL 脚本实现相邻两条数据相减 MSSQL SQL Server 是一种关系型数据库管理系统,广泛应用于各种行业和领域。有时,我们需要对数据库中的数据进行操作,例如计算相邻两条数据的差异。在本文中...

    SqlHelper类

    在.NET框架中,SqlHelper类通常是一个自定义的辅助类,用于简化与SQL Server数据库的交互。这个类是为了提供一种方便、高效的途径来执行SQL命令和处理数据而设计的,尤其是在进行CRUD(创建、读取、更新和删除)操作...

    sql大全 sql大全

    4. **数学函数**:如`SQRT()`求平方根,`ABS()`取绝对值,`RAND()`生成随机数。 操作符在SQL中起到比较和组合数据的作用,如比较操作符(`=`, `&lt;&gt;`, `, `&gt;`, `, `&gt;=`),逻辑操作符(`AND`, `OR`, `NOT`),位操作...

    代替SQL EXPLOR的SQL查询插件

    该EXE软件可以免去通过SQL EXPLOR或者数据库查询界面进行查询的麻烦,直接可以打开该EXE文件,因为该EXE是读去BDE中的数据库别名进行连接,所以使用的时候你的保证你的数据库是否通过ODBC连接上。 因为在程序中用到...

    sql存储过程根据生日求星座

    ### SQL存储过程根据生日求星座 #### 背景与目的 在许多应用场景中,比如社交平台、个性化推荐系统等,我们常常需要根据用户的出生日期来确定其星座,从而进行进一步的数据分析或个性化服务。本篇文章将详细介绍...

    arcgis中的sql语句

    - **聚合函数**:如求总数(`COUNT`)、求和(`SUM`)、平均值(`AVG`)、最大值(`MAX`)和最小值(`MIN`)。 ##### 3. 高级查询运算符 除了基本的DML和DQL语句外,ArcGIS还支持一些高级查询运算符,如: - **UNION**:...

    SQL求比例 qiuqianquan

    通过对给定文件中的 SQL 代码进行解析,我们可以看出“求比例”的实现方式主要是利用 SQL 中的聚合函数如 `SUM` 和 `COUNT`,以及分组查询 `GROUP BY` 来完成。同时,合理的数据类型选择如 `decimal` 可以确保计算...

    SQL 水仙数求法

    在SQL中,水仙花数(也称为自恋数或阿波罗尼奥斯数)是指一个n位数,它的每一位数字的n次幂之和等于它本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。这个问题要求我们找出所有小于1000的水仙花数。 ...

    sql sql sql

    5. 聚合函数:SUM求和,AVG求平均值,COUNT计算数量,MAX和MIN找最大值和最小值。 6. 连接(JOIN)操作:INNER JOIN返回两个表的交集,LEFT JOIN返回左表所有记录及右表匹配的记录,RIGHT JOIN反之,FULL JOIN返回两...

    人大金仓数据库SQL手册

    - **算术操作符**:+(加法)、-(减法)、*(乘法)、/(除法)、%(求模)。 - **字符串操作符**:||(字符串连接)等。 - **日期时间操作符**:用于处理日期和时间的函数,如EXTRACT(提取日期部分)、NOW(获取...

    XML查询语句转换成SQL语句的实现.pdf

    XML 查询语句转换成 SQL 语句的实现 本文主要讨论将 XML 查询语句转换成 SQL 语句的实现。XML 已经成为 Internet 上数据交换的事实标准,特别是在 Web 数据挖掘技术中,对数据源的结构化需求导致人们对 XML 文档的...

    SQL语言参考大全 SQL 语句

    7. **聚合函数**:SQL提供了一系列聚合函数,如`COUNT()`计算记录数量,`SUM()`求和,`AVG()`求平均值,`MAX()`和`MIN()`找出最大最小值。这些函数常用于统计分析。 8. **分组与排序**:`GROUP BY`语句用于根据一个...

Global site tag (gtag.js) - Google Analytics