标签: sql

SQL顺序由两个不同(可能为null)的列组成

我有一个有三列的桌子; 第一列包含ID,另外两列包含日期(其中最多一列为null,但我认为这不会影响任何事情).我如何根据哪个日期更大来订购ID?我试过了

ORDER BY CASE
WHEN date1 > date2 THEN date1
ELSE date2
END
Run Code Online (Sandbox Code Playgroud)

但这没用.谁能帮我?此外,我看到其他人发布的所有类似问题都有它,以便查询根据第一列对结果进行排序,然后如果第一列为空,则为第二列.我首先必须定义每个空值吗?我正在通过完全外部联接创建此表,因此这将是一个完全不同的问题,所以希望它可以使用空值来完成.

sql sql-order-by

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

如何在它们之间用逗号制作T-SQL结果列表?

假设我们有一个像这样的简单查询:

SELECT x 
FROM t
WHERE t.y = z
Run Code Online (Sandbox Code Playgroud)

如果我们在结果集中有一条记录,我想将变量@v设置为该值.如果我们有两个或更多记录,我希望结果用逗号和空格分隔.编写此T-SQL代码的最佳方法是什么?

例:

结果集1条记录:

Value1
Run Code Online (Sandbox Code Playgroud)

结果集2条记录:

Value1, Value2
Run Code Online (Sandbox Code Playgroud)

结果集3条记录:

Value1, Value2, Value3
Run Code Online (Sandbox Code Playgroud)

sql t-sql comma sql-server-2008

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

将单个非重复数据存储到数据库的最佳方法是什么?

将数据存储在数据库中的最佳实践是什么,该数据库只需要一次输入.一个例子是与整个应用程序/网站有关的配置数据.为此创建一个只有一个条目的表是常见的吗?

我在MongoDB数据库的上下文中问,虽然我认为这个问题对SQL数据库也有效.

mysql sql database mongodb nosql

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

mysql_real_escape_string可以防止各种sql注入吗?

可能重复:
围绕mysql_real_escape_string()的SQL注入

我没有看到任何有价值的信息或没有过时的信息.所以,有一个问题:mysql_real_escape_string()是否完全防止SQL注入?然而它是非常过时的(它来自'09),因此在12月的php 5.3和mysql 5.5中,它是否完全保护?

php mysql sql sql-injection

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

列存储索引中列的顺序是否在SQL Server 2012中很重要

我有一个约2亿行和约15列的表.我打算在我的表上创建列存储索引.根据我在列存储索引中使用的列的顺序,性能是否会有任何变化?如果是,它背后的逻辑是什么?

sql sql-server sql-server-2012 columnstore

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

按顺序分组值

我有一些像这样的桌子

row chequeNo
 1     15
 2     19
 3     20
 4     35
 5     16
Run Code Online (Sandbox Code Playgroud)

我需要得到这样的结果

row  from   to    
 1    15    16     
 2    19    20    
 3    35    35
Run Code Online (Sandbox Code Playgroud)

所以我需要一组chequeNo值,这些值将是连续的,没有任何中断.chequeNo是独特的专栏.另外,它应该使用一个sql select查询,因为我没有权限创建除select查询之外的任何sql结构.

那有可能吗?

将不胜感激任何帮助

sql oracle

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

Oracle SQL - 在表中查找NOT值

拿这个表词

WORD
Hello
Aardvark
Potato
Dog
Cat
Run Code Online (Sandbox Code Playgroud)

这个清单:

('Hello', 'Goodbye', 'Greetings', 'Dog')
Run Code Online (Sandbox Code Playgroud)

如何返回不在单词表中但在我的列表中的单词列表?

如果我有一个"包含所有可能的单词"的表,我可以这样做:

SELECT * from ALL_WORDS_TABLE
where word in ('Hello', 'Goodbye', 'Greetings', 'Dog')
and word not in 
(SELECT word from WORDS
where word in ('Hello', 'Goodbye', 'Greetings', 'Dog')
);
Run Code Online (Sandbox Code Playgroud)

但是我没有这样的表.怎么办呢?

此外,构建新表不是一种选择,因为我没有这种访问级别.

sql oracle

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

用户<>注释关系中的MySql Select,Count(*)和SubQueries

我有一项任务来计算具有评论数> X的用户数量.

我的SQL查询如下所示:

SELECT users.id,
       users.display_name, 
       (SELECT COUNT(*) 
          FROM cms_comments 
         WHERE cms_comments.author_id = users.id) AS comments_count 
  FROM users 
HAVING comments_count > 150;
Run Code Online (Sandbox Code Playgroud)

一切都很好,它正确显示所有用户.但我需要查询以一行返回所有这些用户的数量.我不知道如何更改此查询以使其生成正确的数据.

mysql sql subquery aggregate-functions

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

查找视图中使用的别名的真实列名?

假设我有一个视图,其中一些列名是别名,例如本例中的"surName":

CREATE VIEW myView AS
    SELECT  
            firstName,
            middleName,
            you.lastName surName
    FROM 
            myTable me
            LEFT OUTER JOIN yourTable you
            ON me.code = you.code
GO
Run Code Online (Sandbox Code Playgroud)

我可以使用INFORMATION_SCHEMA视图检索有关视图的一些信息.
例如,查询

SELECT column_name AS ALIAS, data_type AS TYPE
FROM information_schema.columns 
WHERE table_name = 'myView'
Run Code Online (Sandbox Code Playgroud)

收益率:

 ----------------
|ALIAS     |TYPE |
 ----------------
|firstName |nchar|
|middleName|nchar|
|surName   |nchar|
 ----------------

但是,我想知道实际的列名.理想的情况是:

 ---------------------------
|ALIAS     |TYPE |REALNAME  |
 ---------------------------
|firstName |nchar|firstName |
|middleName|nchar|middleName|
|surName   |nchar|lastName  |
 ---------------------------

如何根据别名确定实际列名称是什么? 必须有一些方法来使用sys表和/或INFORMATION_SCHEMA视图来检索此信息.


编辑: 我可以接受这种令人厌恶的东西,这与Arion的答案相似:

SELECT
    c.name AS ALIAS,
    ISNULL(type_name(c.system_type_id), t.name) AS DATA_TYPE,
    tablecols.name AS REALNAME …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

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

SQLite LIKE&ORDER BY匹配查询

我需要一个仅使用LIKE搜索1字段的SQLite查询.

基本示例:

SELECT name FROM table WHERE name LIKE "%John%" ORDER BY name LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

问题是我希望以这种方式对结果进行排序:

  1. 如果该字段相等(例如"John")
  2. 如果字段以"John"开头(例如"John Doe")
  3. 如果该字段包含"John"(例如"Jane John Doe")

以下查询实现了预期结果,但速度很慢:

SELECT name FROM table WHERE name LIKE "%John%" ORDER BY CASE WHEN name = "John" 
THEN 1 ELSE 2 END, CASE WHEN name LIKE "John%" THEN 1 ELSE 2 END, name LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

上面的查询比使用3个单独的查询(一个用于完全匹配,一个用于开始,一个用于包含)的替代方法更慢(或我测试不正确).

还有其他选择吗?

sql sqlite

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