标签: sql-in

如何防止内部选择表达式中的SQL Server错误(使用"IN"和"EXISTS"关键字)

我有两个不同的表,其中包含不同的列,如下所示:

CREATE TABLE T1(C1 INT)
CREATE TABLE T2(C2 INT)
Run Code Online (Sandbox Code Playgroud)

每个程序员都知道我们是否用错误的语法编写查询,查询编译器应该给我们一个错误.比如这一个:

SELECT C1 FROM T2 
--ERROR: Invalid column name 'C1'.
Run Code Online (Sandbox Code Playgroud)

但是如果我们使用这个错误的查询作为内部选择,不幸的是SQL会执行它:

SELECT * 
FROM T1
WHERE C1 IN (SELECT C1 FROM T2) 
--returns all rows of T1
Run Code Online (Sandbox Code Playgroud)

并且还会执行以下错误查询并返回所有行 T1

SELECT * 
FROM T1
WHERE EXISTS (SELECT C1 FROM T2) 
--returns all rows of T1
Run Code Online (Sandbox Code Playgroud)

当我们使用这些错误的查询时会变得更糟UPDATE:

UPDATE T1
SET C1 = NULL
WHERE C1 IN (SELECT C1 FROM T2) 
--updates all rows of T1
Run Code Online (Sandbox Code Playgroud)

现在,我想防止这个错误.我可以强迫我的数据库开发人员小心,但有没有系统的方法来防止这个错误?

sql sql-server syntax-error sql-in

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

ORACLE SQL 中 NOT IN 与 NULL 值的困境

当我使用这段代码时

WHEN col1 NOT IN (SELECT col2 FROM table_name) THEN 'something'
Run Code Online (Sandbox Code Playgroud)

知道 col2 包含 NULL 值,它没有给出预期结果,为什么会发生这种情况?将 IN 与 NULL 值一起使用是否会扰乱内存中存储的数据还是什么?

sql oracle null sql-in

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

如何匹配复合类型数组中的元素?

假设我们有两个表:

CREATE TABLE element (
    pk1 BIGINT NOT NULL,
    pk2 BIGINT NOT NULL,
    pk3 BIGINT NOT NULL,
    -- other columns ...
    PRIMARY KEY (pk1, pk2, pk3)
);

CREATE TYPE element_pk_t AS (
    pk1 BIGINT,
    pk2 BIGINT,
    pk3 BIGINT
);

CREATE TABLE collection (
    id BIGINT,
    elements element_pk_t[] NOT NULL,
);
Run Code Online (Sandbox Code Playgroud)

具有element复合PK。自定义类型element_pk_t注册匹配的复合类型。该collection表包含数组element_pk_t

我想在单个查询中查询表中elementPK 与 selected 中的元素匹配的所有行。collection.elements

我尝试过的:

SELECT * 
FROM element 
WHERE (pk1, pk2, pk3) IN (SELECT unnest(elements) 
                          FROM collection …
Run Code Online (Sandbox Code Playgroud)

sql postgresql rowtype sql-in

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

意外标记:第1行第57列附近的值

JPA.em("default").createQuery("insert into USER (FULLNAME, EMAIL, USERNAME, PASSWORD) " + " VALUES (\'"+fullname+"\',\'"+email+"\',\'"+username+"\',\'"+password+"\');");
Run Code Online (Sandbox Code Playgroud)

这是一个错误的查询?我收到此错误:

[IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: VALUES near line 1, column 57 [insert into USER (FULLNAME, EMAIL, USERNAME, PASSWORD) VALUES ('Doniyor','ikbola-86@bk.ru','jurabayev','er');]]
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会发生这种情况,查询字符串实际上还可以,对吧?

非常感谢任何帮助!

谢谢

syntax-error sql-in playframework

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

ORDER BY + IN声明?

营销部门希望首先关注来自Noth America的客户.获取所有客户的ID,姓氏和国家/地区.通过首先培养居住在加拿大和美国的客户来建立清单,最后通过ID订购.提示:在ORDER BY子句中使用IN表达式.

我已经尝试过很多次了

SELECT CustomerID, LastName, Country
FROM Customer
ORDER BY Country IN ('Canada', 'USA'), CustomerID
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用,因为它按照它们出现在原始表中的顺序(也按ID排序)获取所有客户的指定字段,即使我CustomerID从该ORDER BY条款中删除,不关心他们在哪个国家/地区属于.

我该怎么办?我是SQL新手,并不知道如何解决这个问题.

编辑:WHERE根本不适合,因为我需要考虑所有客户,只确保加拿大和美国的客户出现在列表的顶部.另外我不确定之类的语句UNION,AS,EXCEPT并使用类似的东西,是为了,因为教程没去深了.

sql sql-order-by sql-in

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

SQL Where子句有多个字段

我有一张桌子如下.

id          date         value

1           2011-10-01   xx

1           2011-10-02   xx
...

1000000     2011-10-01   xx
Run Code Online (Sandbox Code Playgroud)

然后我有1000个ID,每个人都有一个约会.我想执行以下操作:

SELECT id, date, value
FROM the table
WHERE (id, date) IN ((id1, <= date1), (id2, <= date2), (id1000, <= date1000))
Run Code Online (Sandbox Code Playgroud)

实现上述查询的最佳方法是什么?

sql sql-server where-clause where-in sql-in

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

搜索整数数组

我有一个字符串进来像这样:

 '202,203,204,205,226,230,274'
Run Code Online (Sandbox Code Playgroud)

我想把这个字符串分解成一个数字数组,然后用那些ID返回所有记录.

到目前为止,我有:

string[] myArray = myString.Split(',');
int[] myIntArray = new int[myArray.Length];

 for(int x = 0; x < myArray.Length; x++) {
     myIntArray[x] = Convert.ToInt32(myArray[x].ToString());
 }

 model.Records = db.Records
     .Where(q => q.RecordId.Contains(myIntArray)
     .ToList();
Run Code Online (Sandbox Code Playgroud)

它抱怨包含不使用整数.我对包含的实际情况感到困惑吗?

提前致谢!

c# entity-framework sql-in

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

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

BigQuery 查询适用于多个“喜欢”但不适用于“in”

我想隔离一些具有特定标题的电子邮件。我可以在 where 子句中使用与 OR 连接的多个“like”。这给了我一些结果。但是,如果我尝试在 ('____'、'____' 等) 中执行____,代码会突然返回任何内容。

这是行不通的。

select DATE_TRUNC(DATE(send_time,"America/Los_Angeles"), week(monday)) as week,
status, 
settings_title,
sum(emails_sent) as emails_sent,
sum(report_summary_opens) as report_summary_opens, 
sum(report_summary_unique_opens) as report_summary_unique_opens, 
sum(report_summary_subscriber_clicks) as report_summary_subscriber_clicks
from mailchimp.campaigns_view
where status = 'sent' 
and settings_title in ('%_LL_%', '%_IC_%', '%_AC_%', '%_CC_%', '%_PC_%')
group by 1,2,3
order by 1 desc
Run Code Online (Sandbox Code Playgroud)

然而,这确实有效。

select DATE_TRUNC(DATE(send_time,"America/Los_Angeles"), week(monday)) as week,
status, 
settings_title,
sum(emails_sent) as emails_sent,
sum(report_summary_opens) as report_summary_opens, 
sum(report_summary_unique_opens) as report_summary_unique_opens, 
sum(report_summary_subscriber_clicks) as report_summary_subscriber_clicks
from mailchimp.campaigns_view
where status = 'sent' 
and (settings_title like '%_LL_%'
or …
Run Code Online (Sandbox Code Playgroud)

sql sql-in google-bigquery sql-like

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