小编mwi*_*ahl的帖子

Oracle join运算符

如何重写这个:

select tab1.id, tab2.id, tab3.id 
from tab1, tab2, tab3 
where tab1.col1 = tab2.col1(+) and tab2.col2 = tab3.col2(+);
Run Code Online (Sandbox Code Playgroud)

使用OUTER JOIN语法?

sql oracle outer-join

2
推荐指数
1
解决办法
1288
查看次数

MySQL LEFT JOIN问题 - 缺少LEFT列

我遇到了用于显示自定义配置文件字段和任何(可选)相应值的SQL查询的问题.

这是我正在使用的SQL查询:

SELECT pf.`id`, pf.`name`, pv.`value` FROM `profile_fields` AS pf
LEFT JOIN `profile_values` AS pv ON (pf.`id` = pv.`field_id`)
WHERE (pf.`site_id` = '0' OR pf.`site_id` = '%d') AND (pv.`user_id` = '%d' OR pv.`user_id` IS NULL)
ORDER BY pf.`order` ASC
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,任何没有相应profile_values记录的列都不显示,只显示它们,但只显示空值.

非常感谢!

mysql left-join

2
推荐指数
1
解决办法
2052
查看次数

两个联接的聚合(MySQL)

我有一个名为gallery的表.对于图库中的每一行,表格图片中有几行.一张图片属于一个图库.然后是表投票.每一行都是某个画廊的upvote或downvote.这是(简化)结构:

gallery ( gallery_id )
picture ( picture_id, picture_gallery_ref )
vote ( vote_id, vote_value, vote_gallery_ref )
Run Code Online (Sandbox Code Playgroud)

现在我想要一个查询给我以下信息:所有画廊都有自己的数据字段和连接到画廊的图片数量以及投票的sumarized值.

这是我的查询,但由于多次加入,聚合值不正确.(至少当图片或投票中有多行时.)

SELECT 
  *, SUM( vote_value ) as score, COUNT( picture_id ) AS pictures
FROM 
  gallery
LEFT JOIN 
  vote
  ON gallery_id = vote_gallery_ref
LEFT JOIN 
  picture
  ON gallery_id = picture_gallery_ref
GROUP BY gallery_id
Run Code Online (Sandbox Code Playgroud)

因为我注意到这COUNT( DISTINCT picture_id )给了我正确数量的照片我试过这个:

( SUM( vote_value ) / GREATEST( COUNT( DISTINCT picture_id ), 1 ) ) AS score
Run Code Online (Sandbox Code Playgroud)

它适用于此示例,但如果一个查询中有更多连接,该怎么办?

只是想知道是否有更好或更"优雅"的方式可以解决这个问题.另外我想知道我的解决方案是MySQL特定的还是标准的SQL?

sql join aggregation

2
推荐指数
1
解决办法
3194
查看次数

我的IN子句导致在T-SQL中完全扫描索引.我能做什么?

我有一个包含50个参数的SQL查询,例如这个.

DECLARE
  @p0 int, @p1 int, @p2 int, (text omitted), @p49 int

SELECT
  @p0=111227, @p1=146599, @p2=98917, (text omitted), @p49=125319

--
SELECT
  [t0].[CustomerID], [t0].[Amount],
  [t0].[OrderID], [t0].[InvoiceNumber]
FROM [dbo].[Orders] AS [t0]
WHERE ([t0].[CustomerID]) IN
  (@p0, @p1, @p2, (text omitted), @p49)
Run Code Online (Sandbox Code Playgroud)

估计的执行计划显示数据库将收集这些参数,对它们进行排序,然后从最小参数读取索引Orders.CustomerID 到最大值,然后对记录的其余部分执行书签查找.

问题是,最小和最大的参数可能相距很远,这将导致可能读取整个索引.

由于这是在客户端的循环中完成的(每次发送50个参数,1000次迭代),这是一个糟糕的情况.如何在不重复索引扫描的情况下制定查询/客户端代码以获取我的数据,同时保持往返次数减少?


我考虑订购50k参数,以便发生较小的索引读数.有一个可怕的缓解情况阻止了这一点 - 我不能使用这个解决方案.为了模拟这种情况,假设我在任何时候只有50个id可用,并且无法控制它们在全局列表中的相对位置.

t-sql sql-server indexing optimization

2
推荐指数
1
解决办法
881
查看次数

SQL Server Service Broker - 处理SQL Server实例之间的两阶段提交的建议

我们正在探索在两个不同的SQL Server实例之间进行通信的不同方法.其中一个理想的工作流程是向"远程"侧发送某种消息,请求删除记录.当该系统完成删除时,它保持其事务处于打开状态并将响应发送回启动器,然后启动器删除其相应的记录,提交其事务,然后将消息发送回"远程"端,告诉它,最后,同时提交删除.

这是一个穷人近似的两阶段提交.关于SQL Server Service Broker是否可以合理地干净地处理这种类型的场景,该部门正在进行宗教辩论.任何人都可以了解它是否可以吗?有类似工作流程的经验吗?考虑到SQL Server实例位于单独的非域计算机上,是否有更好的机制我应该考虑实现这一点?

编辑:为了澄清,我们不能使用分布式事务,因为网络安全性既紧凑又有些随意.我们不允许进行可能的配置.

sql-server transactions service-broker sql-server-2008

2
推荐指数
1
解决办法
607
查看次数

字符指针导致输出错误

我有关于char ptr输出的问题.以下是我试图执行的示例代码..

struct DeviceInfo{

char * name;
int id;

};
void testFunc(DeviceInfo *info){

    char temp[50] = "test input";
    info->name = temp;

}
void main(){

    DeviceInfo deviceInfo;
    testFunc(&deviceInfo);
    std::cout<<"Output is "<<deviceInfo.name;


}
Run Code Online (Sandbox Code Playgroud)

输入我得到的主要是某种奇怪的....在调试时我发现当"test.name"传递给输出流时,它不仅提供垃圾输出,而且还改变了"名称"值"deviceInfo"对象为该垃圾值...这是一种测试场景,但在实际应用中,这个testFunc必须以相同的方式执行,即常量char字符串应该被赋予char ptr的名称.

我试着把'\ 0'放在char temp的末尾,就像这个temp [strlen(temp)] ='\ 0';

但它仍然无法正常工作

任何帮助表示赞赏......

拉扎

c++ char

2
推荐指数
1
解决办法
273
查看次数

最大化SQL Server Service Broker吞吐量

我们已经为我们的应用程序实现了SSB消息传递解决方案,但现在正在遇到扩展问题.任何具有SSB应用程序扩展经验的人都能提出任何关于我们可能做错的建议吗?

设置是我们使用单个启动器队列,该队列使用激活的过程为单个目标队列提供信息.激活的过程处理接收的消息,并选择性地将它们分派给已注册相关类型消息的客户端.

此第二阶段调度再次使用单个引导程序队列(不同于用于初始消息注入的队列),并将消息发送到确定为适当的任意数量的客户端队列.

每个客户端对数据库执行操作,创建发送到所有其他客户端的消息,因此这是一个N ^ 2扩展问题.对于相对较少数量的客户端(10个或更少),这对我们来说不构成问题,但是当我们扩展到N = 35或N = 40范围时,我们开始将消息排队比我们处理它们的速度更快指向工作流程,我们开始遇到严重的延迟问题.我们失败的负载仍然在SSB实现的最佳情况下报告,所以我确信我们的实现存在缺陷.

相关诊断包括:

  1. 我们的服务器有足够的CPU,I/O和网络带宽,即使在我们看到的最重的客户端负载下,即使消息在队列中备份也是如此.
  2. 我们已将系统配置为从激活过程的5个副本到512个副本激活,对吞吐量和最终用户性能几乎没有明显影响.
  3. 激活的过程一次对多个消息进行操作,并使用一些温和的XML查询和针对某些小型数据库表的SELECTS处理它们.我们在空载条件下测试了这个程序,它的开销很轻.
  4. 我们显示了LCK_M_X,PAGELATCH_SH,PAGELATCH_EX和WRITELOG等待的高百分比(这些是前4名违规者).
  5. 我们显示的SEND /秒数大约是我们在最负载下看到的RECEIVE /秒的两倍.

如果有其他诊断对任何可能了解我们可以采取哪些措施加速配置的人有帮助,我可能会找到它们.

sql-server performance service-broker sql-server-2008-r2

2
推荐指数
1
解决办法
1164
查看次数

如何进行SubTable的LINQ外连接?

我有一个这种类型的设置数据表.

表A.

AID     AName
---------------------
1       A_Name1
2       A_Name2
3       A_Name3
Run Code Online (Sandbox Code Playgroud)

表B.

BID     BName
---------------------
10      B_Name1
20      B_Name2
30      B_Name3
Run Code Online (Sandbox Code Playgroud)

表C.

AID     BID
---------------------
1       10
2       10
2       20
2       30
3       20
3       30
Run Code Online (Sandbox Code Playgroud)

我想使用LINQ编写一个查询,对于给定的A的ID,我给出了不在表C中的B列表.

因此,对于1的AID,我希望BID为20和30.

对于AID为3,我希望BID为10

对于2的AID,没有任何返回任何返回.

我知道SQL会

SELECT
    B.BID
FROM B
LEFT OUTER JOIN C ON C.BID = B.BID AND A.AID = 1 
-- AID would change based on which I was looking for, 1, 2, or 3
Run Code Online (Sandbox Code Playgroud)

什么是LINQ等效?

请假设我有相应的A,B和C表的对象.

.net join linq-to-sql

1
推荐指数
1
解决办法
1565
查看次数

在单个查询中连接选定的列?

我知道你可以做到这一点,因为我之前已经看过它,但我忘记了到现在为止我不需要这样做.

我有一个名为Employees的表,它有各种员工数据(duh).我需要一个查询,它将对表中所有行的名字和姓氏进行选择,然后将它们全部置于逗号分隔的字符串中.

例如,我有几行(比实际上要多得多,但为了这个问题,假设有两个)数据看起来像:

FName    LName
-------  -----
Richard  Prescott
Jill     Sentieri
Carol    Winger

我需要一个能够以这种形式返回上述数据的选择:

Richard Prescott, Jill Sentieri, Carol Winger

预先感谢您的帮助!

sql sql-server select concatenation

1
推荐指数
1
解决办法
5191
查看次数

在sql语句中使用不等于<>符号是不是很差的编程习惯?

<>SQL语句中使用不等号的糟糕编程习惯吗?

我在表列类型中有三个值.值可以是0,1或2.哪个SQL语句更好?

1)WHERE类型<> 2
2)WHERE类型(0,1)

sql

1
推荐指数
1
解决办法
135
查看次数