标签: row-value-expression

在SQL"IN"子句中使用元组

我有一个包含字段group_id和group_type的表,我想从表中查询具有元列表中任何元组(组ID,组类型)的所有记录.例如,我希望能够做到这样的事情:

SELECT *
FROM mytable
WHERE (group_id, group_type) IN (("1234-567", 2), ("4321-765", 3), ("1111-222", 5))
Run Code Online (Sandbox Code Playgroud)

一个非常类似的问题已经在:使用sql in子句中的元组,但是在那里提出的解决方案假定元组列表是从另一个表中获取的.这在我的情况下不起作用是元组值是硬编码的.

一种解决方案是使用字符串连接:

SELECT *
FROM mytable
WHERE group_id + STR(group_type, 1) IN ("1234-5672", "4321-7653", "1111-2225")
Run Code Online (Sandbox Code Playgroud)

但问题是该表非常大,并且对每个记录执行字符串连接和转换将非常昂贵.

有什么建议吗?

sql sql-server tuples row-value-expression

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

SQL:元组比较

在我当前的应用程序中,我需要能够执行此类查询:

SELECT MIN((colA, colB, colC)) 
FROM mytable
WHERE (colA, colB, colC) BETWEEN (200, 'B', 'C') AND (1000, 'E', 'F')
Run Code Online (Sandbox Code Playgroud)

并得到(333, 'B', 'B')这个数据的答案:

+------+------+------+
| colA | colB | colC |
+------+------+------+
|   99 | A    | A    |
|  200 | A    | Z    |
|  200 | B    | B    |
|  333 | B    | B    |
|  333 | C    | D    |
|  333 | C    | E    |
|  333 | D    | …
Run Code Online (Sandbox Code Playgroud)

mysql sql aggregate-functions row-value-expression

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

在sql in子句中使用元组

给定这样的数据库:

BEGIN TRANSACTION;
CREATE TABLE aTable (
a STRING,
b STRING);
INSERT INTO aTable VALUES('one','two');
INSERT INTO aTable VALUES('one','three');
CREATE TABLE anotherTable (
a STRING,
b STRING);
INSERT INTO anotherTable VALUES('one','three');
INSERT INTO anotherTable VALUES('two','three');
COMMIT;
Run Code Online (Sandbox Code Playgroud)

我想做一些事情

SELECT a,b FROM aTable
WHERE (aTable.a,aTable.b) IN
(SELECT anotherTable.a,anotherTable.b FROM anotherTable);
Run Code Online (Sandbox Code Playgroud)

得到答案'一','三',但我得到"接近",":语法错误"

这有可能在SQL的任何风格?(我正在使用sqlite)

我是否犯了严重的概念错误?或者是什么?

sql row-value-expression

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

在SQL中使用IN与元组集(SQLite3)

我在SQLite3数据库中具有下表:

CREATE TABLE overlap_results (
neighbors_of_annotation varchar(20),
other_annotation varchar(20),
set1_size INTEGER,
set2_size INTEGER,
jaccard REAL,
p_value REAL,
bh_corrected_p_value REAL,
PRIMARY KEY (neighbors_of_annotation, other_annotation)
);
Run Code Online (Sandbox Code Playgroud)

我想执行以下查询:

SELECT * FROM overlap_results WHERE 
(neighbors_of_annotation, other_annotation)
IN (('16070', '8150'), ('16070', '44697'));
Run Code Online (Sandbox Code Playgroud)

也就是说,我有几个带注释ID的元组,我想获取每个这些元组的记录。sqlite3提示给我以下错误:

SQL error: near ",": syntax error
Run Code Online (Sandbox Code Playgroud)

如何正确将其表示为SQL语句?


编辑我意识到我并没有很好地解释我真正的追求。让我再尝试一下。

如果某人给我neighbors_of_annotation他们感兴趣的任意术语列表,我可以编写如下的SQL语句:

SELECT * FROM overlap_results WHERE 
neighbors_of_annotation
IN (TERM_1, TERM_2, ..., TERM_N);
Run Code Online (Sandbox Code Playgroud)

但现在假设这个人想给我双方面的,如果形式(TERM_1,1, TERM_1,2)(TERM_2,1, TERM_2,2),... (TERM_N,1, TERM_N,2),这里TERM_i,1neighbors_of_annotationTERM_i,2other_annotation。SQL语言是否提供同样优雅的方法来为感兴趣的对(元组)制定查询?

最简单的解决方案似乎是为这些对创建一个新表,然后将该表与要查询的表连接起来,并仅选择第一项和第二项匹配的行。创建大量 …

sql sqlite row-value-expression

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

是否可以比较SQL查询的`WHERE`子句中的*元组*?

是否可以在SQL查询的子句中比较元组(thanks,a_horse_with_no_name)WHERE?那样,我可以转换这个:

/* This is actually a sub-sub-sub-query in the middle *
 * of an incredibly complex stored procedure.         */
SELECT ISNULL(SUM(DT.DetailField), 0)
FROM   DetailTable DT
WHERE  DT.ForeignKey = ...
AND    EXISTS (/* I know this sub-sub-sub-sub-query *
                * will return at most one row.      */
               SELECT 'X'
               FROM   HeaderTable HT
               WHERE  HT.HeaderKey    = DT.HeaderKey
               AND    HT.HeaderField1 = ...
               AND    HT.HeaderField2 = ...)
Run Code Online (Sandbox Code Playgroud)

进入类似的东西:

SELECT ISNULL(SUM(DetailField), 0)
FROM   DetailTable DT
WHERE  DT.ForeignKey = ...
AND    (SELECT HT.HeaderField1, …
Run Code Online (Sandbox Code Playgroud)

sql subquery row-value-expression

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

sqlite元组比较

试着和这个问题做同样的事情,但这次是在sqlite中.在我当前的应用程序中,我需要能够执行此类查询:

SELECT First, Last, Score
FROM mytable
WHERE
    ('John',  'Jordan',  5) <= (First, Last, Score )
    AND (First, Last, Score) <= ('Mike',  'Taylor',  50) 
ORDER BY First, Last, Score
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

并得到('Liz', 'Jordan', 2)这个数据的答案:

+-------+---------+-------+
| First | Last    | Score |
+-------+---------+-------+
| Liz   | Jordan  |     2 |
| John  | Jordan  |     2 |
| Liz   | Lemon   |    10 |
| Mike  | Taylor  |   100 |
| John  | Jackson | …
Run Code Online (Sandbox Code Playgroud)

sql sqlite row-value-expression

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

SQL WHERE IN 子句中的多个键

假设您有Accounts一个表,其中ID列是 PK 并且TaxID+AccountNumber是唯一约束:

select * from Accounts where ID in (100, 101)
Run Code Online (Sandbox Code Playgroud)

现在您想使用自然键进行类似的查询:

select * from Accounts 
where {TaxID, AccountNumber} in 
  ({"0123456", "2000897"}, {"0125556", "2000866"})
Run Code Online (Sandbox Code Playgroud)

所以这涉及元组并且看起来非常合法。是否可以用 ANSI SQL 来表达?也许在某些特定的 SQL 扩展中?如果不是,为什么(欢迎任何猜测)?

sql row-value-expression

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

T-SQL相当于oracle sql where子句有多个列

让我们来看看Oracle SQL,它完美地运行:

样本数据:

SQL> create table test (a number, b number);
SQL> insert into test values(1, 1);
SQL> insert into test values(1, 2);
SQL> insert into test values(1, 3);
SQL> insert into test values(1, 4);
SQL> insert into test values(1, 5);
SQL> insert into test values(2, 1);
SQL> insert into test values(2, 2);
SQL> insert into test values(2, 3);
SQL> insert into test values(2, 4);
SQL> insert into test values(2, 5);
SQL> insert into test values(4, 1);

SQL> select * …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server oracle row-value-expression

5
推荐指数
2
解决办法
1602
查看次数

空复合类型和具有所有空列的复合类型之间的区别

空值和所有列均为空的行类型之间是否有区别?Postgres查询似乎能够分辨出差异(显示空列而不是空白),我想知道是否有什么我应该注意的。例如

CREATE TYPE node AS (
   rank integer
 , id integer
);

CREATE TABLE hierarchy (
   node node
);

INSERT INTO hierarchy (node) VALUES (null);
INSERT INTO hierarchy (node) VALUES ((null, null));

SELECT *, node IS NULL AS check_null FROM hierarchy;
Run Code Online (Sandbox Code Playgroud)
 node | check_null
------+------------
      | t
 (,)  | t
Run Code Online (Sandbox Code Playgroud)

postgresql null distinct row-value-expression postgresql-9.6

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

SQL Where子句

我的应用程序最初有一个类似于这个的查询: -

SELECT column_name from PERSON
WHERE name in (list);
Run Code Online (Sandbox Code Playgroud)

其中list是逗号分隔列表.

但是,现在需求已经改变,我必须查询具有名称和年龄的Persons表.我有nameAgeList.

最初,我认为类似于此的查询将起作用(从nameAgeList创建nameList和ageList)

SELECT column_name from Person 
WHERE name in (nameList) 
AND age in (ageList)
Run Code Online (Sandbox Code Playgroud)

但经过仔细思考,这似乎是一个错误的查询.

请告诉我如何继续进行此查询.

sql row-value-expression

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