我有一个有三列的桌子; 第一列包含ID,另外两列包含日期(其中最多一列为null,但我认为这不会影响任何事情).我如何根据哪个日期更大来订购ID?我试过了
ORDER BY CASE
WHEN date1 > date2 THEN date1
ELSE date2
END
Run Code Online (Sandbox Code Playgroud)
但这没用.谁能帮我?此外,我看到其他人发布的所有类似问题都有它,以便查询根据第一列对结果进行排序,然后如果第一列为空,则为第二列.我首先必须定义每个空值吗?我正在通过完全外部联接创建此表,因此这将是一个完全不同的问题,所以希望它可以使用空值来完成.
假设我们有一个像这样的简单查询:
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) 将数据存储在数据库中的最佳实践是什么,该数据库只需要一次输入.一个例子是与整个应用程序/网站有关的配置数据.为此创建一个只有一个条目的表是常见的吗?
我在MongoDB数据库的上下文中问,虽然我认为这个问题对SQL数据库也有效.
我没有看到任何有价值的信息或没有过时的信息.所以,有一个问题:mysql_real_escape_string()是否完全防止SQL注入?然而它是非常过时的(它来自'09),因此在12月的php 5.3和mysql 5.5中,它是否完全保护?
我有一个约2亿行和约15列的表.我打算在我的表上创建列存储索引.根据我在列存储索引中使用的列的顺序,性能是否会有任何变化?如果是,它背后的逻辑是什么?
我有一些像这样的桌子
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结构.
那有可能吗?
将不胜感激任何帮助
拿这个表词
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)
但是我没有这样的表.怎么办呢?
此外,构建新表不是一种选择,因为我没有这种访问级别.
我有一项任务来计算具有评论数> 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)
一切都很好,它正确显示所有用户.但我需要查询以一行返回所有这些用户的数量.我不知道如何更改此查询以使其生成正确的数据.
假设我有一个视图,其中一些列名是别名,例如本例中的"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) 我需要一个仅使用LIKE搜索1字段的SQLite查询.
基本示例:
SELECT name FROM table WHERE name LIKE "%John%" ORDER BY name LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
问题是我希望以这种方式对结果进行排序:
以下查询实现了预期结果,但速度很慢:
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 ×10
mysql ×3
oracle ×2
sql-server ×2
t-sql ×2
columnstore ×1
comma ×1
database ×1
mongodb ×1
nosql ×1
php ×1
sql-order-by ×1
sqlite ×1
subquery ×1