我有两个不同的表,其中包含不同的列,如下所示:
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)
现在,我想防止这个错误.我可以强迫我的数据库开发人员小心,但有没有系统的方法来防止这个错误?
当我使用这段代码时
WHEN col1 NOT IN (SELECT col2 FROM table_name) THEN 'something'
Run Code Online (Sandbox Code Playgroud)
知道 col2 包含 NULL 值,它没有给出预期结果,为什么会发生这种情况?将 IN 与 NULL 值一起使用是否会扰乱内存中存储的数据还是什么?
假设我们有两个表:
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) 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)
我不知道为什么会发生这种情况,查询字符串实际上还可以,对吧?
非常感谢任何帮助!
谢谢
营销部门希望首先关注来自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并使用类似的东西,是为了,因为教程没去深了.
我有一张桌子如下.
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)
实现上述查询的最佳方法是什么?
我有一个字符串进来像这样:
'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)
它抱怨包含不使用整数.我对包含的实际情况感到困惑吗?
提前致谢!
SELECT * from table1 where column1 IN (SELECT column1 from table1 ORDER BY column1);
Run Code Online (Sandbox Code Playgroud) 我想隔离一些具有特定标题的电子邮件。我可以在 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-in ×9
sql ×7
oracle ×2
sql-order-by ×2
sql-server ×2
syntax-error ×2
c# ×1
null ×1
oracle11g ×1
postgresql ×1
rowtype ×1
sql-like ×1
where-clause ×1
where-in ×1