标签: sql

如何扩展此查询以查找三个项目的有效组合?

我完全不希望在这里得到任何答案,但无论如何我都会尝试.

所以这出演了天际.我想要一种简单的方法来查找哪些成分可以组合成不同的药水/毒药,所以我制作了一个有ID和名字的成分表; 具有ID,名称,毒药标志和药水标志的效果表(药水和毒药是互斥的); 以及具有成分ID和效果ID的连接表.

因此它的工作方式是每种成分都有4种不同的效果,对多种成分重复效果.在游戏中你可以组合2或3种成分,结果是一种药水或毒药,所有的效果都与至少2种成分相匹配.因此,如果您使用3种成分并且effect1同时出现在ingredient1和ingredient2上,而effect2同时出现在ingredient1和ingredient3上,那么结果将是具有effect1和effect2的药水/毒药.

我能够自己提出一个查询,它将显示每种可能的2种成分组合,它们会产生一种没有毒害效果的药水.首先,我需要找到每种可能的2种成分组合,它们只具有非毒性的匹配效果:

SELECT i1.UniqIngredient UniqIngredient1, i2.UniqIngredient UniqIngredient2
FROM Ingredient i1
CROSS JOIN Ingredient i2
INNER JOIN IngredientEffectJT jt1 ON i1.UniqIngredient = jt1.UniqIngredient
INNER JOIN IngredientEffectJT jt2 ON i2.UniqIngredient = jt2.UniqIngredient
INNER JOIN Effect e ON jt1.UniqEffect = e.UniqEffect AND jt2.UniqEffect = e.UniqEffect
WHERE i1.UniqIngredient < i2.UniqIngredient
GROUP BY i1.UniqIngredient, i2.UniqIngredient
HAVING SUM(e.Poison) = 0
Run Code Online (Sandbox Code Playgroud)

成分与成分交叉连接以获得每种组合,但由于成分的顺序无关紧要,我最终会得到两倍的结果.这就是WHERE检查i1.UniqIngredient <i2.UniqIngredient的原因.我只会看到每种组合一次,2种成分的较低ID将始终位于第1列.我将两种成分加入到相同的效果中,因为我只关心产生结果的组合.然后我用2种成分对它们进行分组并计算它们共有多少毒害效果,因为我只想要具有0种毒素效果的组合.

然后我将这个结果用作一个表格,我将其加入到成分和效果表中,以获得生成药水的每种可能的2种成分组合的列表,以及每种组合的效果:

SELECT i1.Name, i2.Name, e.Name
FROM (SELECT i1.UniqIngredient UniqIngredient1, i2.UniqIngredient UniqIngredient2
FROM Ingredient i1
CROSS JOIN Ingredient i2
INNER JOIN …
Run Code Online (Sandbox Code Playgroud)

sql t-sql

11
推荐指数
2
解决办法
535
查看次数

在SQL Server中添加+ - 1年

我尝试选择当前年份在+1和-1之间的年份模型的产品.我只希望年份(2011年)不是完整的日期和时间.

SELECT ProductName FROM tblProduct WHERE Year BETWEEN 
year(getdate()+1) AND year(getdate()-1)
Run Code Online (Sandbox Code Playgroud)

不起作用,但类似的东西可能......

sql sql-server sql-server-2008

11
推荐指数
2
解决办法
3万
查看次数

从LEFT JOIN设置NULL列的默认值并使用WHERE过滤

我有一个项目表,我有一个单独的表格,其中包含每个项目的个别购买.并非每件商品都已购买.我正在选择购买计数并将其与items表连接,其语句类似于以下内容:

SELECT items.name, purchases_count
FROM `items` 
    LEFT JOIN (SELECT sales.item_name, SUM(unit_sales) AS purchases_count 
        FROM sales GROUP BY item_name) sales ON sales.item_name = items.uid
Run Code Online (Sandbox Code Playgroud)

这导致数据类似于:

+------+-----------------+
| name | purchases_count |
|------+-----------------+
| Shoe | 12              |
| Belt | NULL            |
+------+-----------------+
Run Code Online (Sandbox Code Playgroud)

当我想在上面过滤这个结果时,我的问题出现了purchases_count.如果我使用WHERE purchases_count < 10或类似的东西,根本没有销售记录的项目(即具有NULL价值的项目)将从搜索中排除.

我试图使用COALESCE(purchases_count,0) AS purchases_count哪个正确地将NULL记录设置为0,但在使用时它们仍然没有出现WHERE.我怀疑这COALESCE是在发生之后发生的WHERE.

我希望能够使用WHERE并包含NULL结果(作为零)来过滤此数字.有什么建议?

mysql sql left-join

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

连接应该多久关闭/打开一次?

我在C#上逐行写入SQL服务器上的两个表.

我的C#app将参数传递给2个存储过程,每个过程都将行插入表中.

每次调用存储过程时,我都会打开然后关闭连接.

我需要在数据库中写入大约100米的行.

每次调用存储过程时,我应该关闭并打开连接吗?

这是我正在做的一个例子:

public static void Insert_TestResults(TestResults testresults)
        {
            try
            {
                DbConnection cn = GetConnection2();
                cn.Open();

                // stored procedure
                DbCommand cmd = GetStoredProcCommand(cn, "Insert_TestResults");
                DbParameter param;

                param = CreateInParameter("TestName", DbType.String);
                param.Value = testresults.TestName;
                cmd.Parameters.Add(param);


                if (testresults.Result != -9999999999M)
                {
                    param = CreateInParameter("Result", DbType.Decimal);
                    param.Value = testresults.Result;
                    cmd.Parameters.Add(param);
                }


                param = CreateInParameter("NonNumericResult", DbType.String);
                param.Value = testresults.NonNumericResult;
                cmd.Parameters.Add(param);

                param = CreateInParameter("QuickLabDumpID", DbType.Int32);
                param.Value = testresults.QuickLabDumpID;
                cmd.Parameters.Add(param);
                // execute
                cmd.ExecuteNonQuery();

                if (cn.State == ConnectionState.Open)
                    cn.Close();

            }
            catch (Exception e)
            { …
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server

11
推荐指数
3
解决办法
3228
查看次数

如何在SQL Server中向列添加标识?

我有一张大约1000万行的表.我们刚从SQL Server Management Studio的另一个数据库导入它.它创建表但主键列上没有标识和主键.

我可以添加主键但无法添加标识.当我在设计师中做这件事的时候,它一直都是超时的.即使我将时间设置为0.

我需要创建另一个列集主键和标识,从旧复制数据,删除旧列并重命名新列.

任何人都可以告诉我这样的大桌子最好的方法是什么,没有额外的过热?

sql sql-server sql-server-2008

11
推荐指数
2
解决办法
4万
查看次数

在IOS中触发触摸时,HTML5 Web SQL事务会跳过而不会出错

我在IOS设备上进行数据库事务时遇到问题.如果用户没有触摸手机,一切都按预期工作.如果用户点击/滚动/触摸屏幕,一些事务直接调用其successCallback,而不调用实际的事务回调.

这里的简化示例:http://jsfiddle.net/Tk9rv/

要测试,只需在IOS上的移动Safari中打开http://jsfiddle.net/Tk9rv/embedded/result/,并且在加载时不要触摸设备.您将看到生成的调试消息列表,如下所示:

database is running
table will be cleared
store method called for '10'.
about to insert '10'.
transaction successful for '10'
store method called for '9'.
about to insert '9'.
transaction successful for '9'
store method called for '8'.
about to insert '8'.
transaction successful for '8'
[...]
Run Code Online (Sandbox Code Playgroud)

现在,重新加载页面并在加载时,滚动并随机点击.您将看到一些"即将插入..."消息丢失.

database is running
table will be cleared
store method called for '10'.
about to insert '10'.
transaction successful for '10'
store method called for …
Run Code Online (Sandbox Code Playgroud)

javascript sql iphone html5 ios

11
推荐指数
2
解决办法
5376
查看次数

使用递归查询访问有向图,就好像它是一个无向图

我需要您关于访问存储在数据库中的有向图的帮助.

请考虑以下有向图

1->2 
2->1,3 
3->1
Run Code Online (Sandbox Code Playgroud)

表存储这些关系:

create database test;
\c test;

create table ownership (
    parent bigint,
    child  bigint,
    primary key (parent, child)
);

insert into ownership (parent, child) values (1, 2);
insert into ownership (parent, child) values (2, 1);
insert into ownership (parent, child) values (2, 3);
insert into ownership (parent, child) values (3, 1);
Run Code Online (Sandbox Code Playgroud)

我想提取从节点可到达的图形的所有半连接边(即忽略方向的连接边).即,如果我从parent = 1开始,我想要以下输出

1,2
2,1
2,3
3,1
Run Code Online (Sandbox Code Playgroud)

我正在使用postgresql.

我修改了Postgres手册上例子来解释递归查询,并且我已经调整了连接条件以"向上"和"向下"(这样做我忽略了方向).我的查询如下:

\c test

WITH RECURSIVE graph(parent, child, path, depth, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql recursion graph common-table-expression

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

SQL ANY和SOME关键字在所有SQL方言中都是同义词吗?

在Postgres中,ANY并且SOME在谓词表达式的右侧使用时是同义词.例如,这些是相同的:

column = ANY (SELECT ...)
column = SOME (SELECT ...)
Run Code Online (Sandbox Code Playgroud)

这在此处记录:

http://www.postgresql.org/docs/9.1/static/functions-subquery.html#FUNCTIONS-SUBQUERY-ANY-SOME

我已观察ANYSOME至少得到这些SQL DBMS的支持:

  • DB2
  • 德比
  • H2
  • HSQLDB
  • 安格尔
  • MySQL的
  • 神谕
  • Postgres的
  • SQL Server
  • Sybase ASE
  • Sybase SQL Anywhere

我可以安全地假设所有这些方言(以及其他方言)都作为同义词处理ANY,SOME或者在任何/某些DBMS中两个关键字之间是否存在细微差别?

我在SQL92定义中找到了这个:

<quantifier> ::= <all> | <some>
<all> ::= ALL
<some> ::= SOME | ANY
Run Code Online (Sandbox Code Playgroud)

这并没有说出ANY和的语义SOME.稍后在文档中,仅<some>引用,而不是两个关键字.我怀疑在NULL处理方面可能存在细微差别,例如,至少在一些DBMS中.任何/某些指向明确声明的指针是否可以被假定是值得欢迎的.

sql subquery any sql-standards

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

有没有'基于网络'的SQL测试环境?

在HTML + CSS + JS世界中,http://jsfiddle.net/是一个非常有用的工具,用于询问/制作关于Web开发的示例.我还看到了几个基于浏览器(javascript)的编程语言编译器和REPL.但我无法找到数据库操作的在线/基于Web的测试环境(特别是对于RDBMS).

是否有任何开放/免费的数据库服务与基于Web的界面测试查询?


补充:这个工具对这种情况有好处; 如果我遇到复杂的查询问题,那么通过Web界面创建一个示例表,并在stackoverflow上使用'sample table URL'询问它.任何人都可以访问该网址并在网站上测试他们的查询.(是的,查询正在'真正的'数据库系统上运行)并且还可以跟踪查询结果,然后我们甚至可以为它做'排名':)

sql database

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

在列上使用distinct并在另一列上执行order by会产生错误

我有一个表:abc_test,列n_num,k_str.

此查询不起作用:

    select distinct(n_num) from abc_test order by(k_str)
Run Code Online (Sandbox Code Playgroud)

但是这个有效:

    select n_num from abc_test order by(k_str)
Run Code Online (Sandbox Code Playgroud)

DISTINCT和ORDER BY关键字如何在内部工作,以改变两个查询的输出?

sql oracle distinct sql-order-by oracle9i

11
推荐指数
4
解决办法
2万
查看次数