对于IN子句中不存在列,但SQL运行感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解sql不在in里面怎么写,并且为您提供关于JOINON子句中的T-SQLCase语句、join子句中表达式
对于IN子句中不存在列,但SQL运行感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解sql 不在in里面怎么写,并且为您提供关于JOIN ON子句中的T-SQL Case语句、join子句中表达式之一的类型在Entity Framework中不正确、josn字段中不存在数据或者不存在某个key进行sql查询时报错问题解决、MySQL IN子句中的多列的宝贵知识。
本文目录一览:- IN子句中不存在列,但SQL运行(sql 不在in里面怎么写)
- JOIN ON子句中的T-SQL Case语句
- join子句中表达式之一的类型在Entity Framework中不正确
- josn字段中不存在数据或者不存在某个key进行sql查询时报错问题解决
- MySQL IN子句中的多列
IN子句中不存在列,但SQL运行(sql 不在in里面怎么写)
SELECT * FROM table A JOIN table B ON A.ID = B.ID WHERE B.AnotherColumn IN (SELECT Column FROM tableC WHERE ID = 1)
tableC没有Column列,但查询执行得很好而没有错误消息.有人可以解释为什么吗
解决方法
例如:
CREATE TABLE #test_main (colA integer) CREATE TABLE #test_sub (colB integer) -- Works,because colA is available to the sub-query from the outer query. However,-- it's probably not what you intended to do: SELECT * FROM #test_main WHERE colA IN (SELECT colA FROM #test_sub) -- Doesn't work,because colC is Nowhere in either query SELECT * FROM #test_main WHERE colA IN (SELECT colC FROM #test_sub)
正如damien所观察到的,保护自己免受这种不太明显的“陷阱”的最安全的方法是养成在子查询中限定列名的习惯:
-- Doesn't work,because colA is not in table #test_sub,so at least you get -- notified that what you were trying to do doesn't make sense. SELECT * FROM #test_main WHERE colA IN (SELECT #test_sub.colA FROM #test_sub)
JOIN ON子句中的T-SQL Case语句
我正在尝试在JOIN ON
子句中构建case / if语句。
LEFT JOIN [CTSTRC] [Statuses] ON RIGHT([Statuses].[STRID], 3) = [CTE].[F61]
问题在于该列[Statuses].[STRID]
包含文本和数字。我要与之比较的列[CTE].[F61]
是一个整数。
有没有一种方法可以检测列[Statuses].[STRID]
是否包含字符或数字,然后将其设置为0,然后将其设置为0?
这是一个伪查询可以帮助您:
LEFT JOIN [CTSTRC] [Statuses] ON RIGHT(( CASE [Statuses].[STRID] WHEN TEXT THEN 0 ELSE CAST([Statuses].[STRID] AS INT) END), 3) = [CTE].[F61]
答案1
小编典典您正在寻找IsNumeric,但它并不总是有效(+,-和。是数字),因此您需要使用GBN所描述的解决方案,即在您的varchar中添加.0e0
LEFT JOIN [CTSTRC] [Statuses] ON (CASE WHEN ISNUMERIC(RIGHT([Statuses].[STRID], 3) + ''.0e0) = 1 THEN CAST(RIGHT([Statuses].[STRID], 3) AS INT) ELSE 0 END) = [CTE].[F61]
join子句中表达式之一的类型在Entity Framework中不正确
尝试执行此查询时:
var query = from dpr in ctx.DPR_MM
join q in ctx.QOT on dpr.DPR_QOT_ID equals qot_id
join p in ctx.PAY_MM on new { q.QOT_SEC_ID,dpr.DPR_TS } equals new { p.PAY_SEC_ID,p.PAY_DATE }
where q.QOT_ID = qot_id
select new
{
dpr.dpr_ts,dpr.dpr_close,pay.First().pay_dividend
};
我收到此错误:
join子句中的表达式之一的类型不正确。调用“加入”时类型推断失败。
QOT_SEC_ID
是类型decimal
, PAY_SEC_ID
也是类型int32
。我不允许在表格中更改它。
无论我做什么,我都无法在模型的属性中对其进行更改。我试图转换这样的类型:
join p in ctx.PAY on new { sec_id = (Int32)(q.QOT_SEC_ID),dpr.DPR_TS } equals new { sec_id = (Int32)p.PAY_SEC_ID,p.PAY_DATE }
但是得到上面的错误。
josn字段中不存在数据或者不存在某个key进行sql查询时报错问题解决
//获取面试结果为已通过的 Integer passInterviewList = baseMapper.selectCount(new QueryWrapper<NeoCrmCustomerInterview>() .and(ele -> ele.eq("interview_status_init", CustomerInterviewEnum.PASS_WAIT_FEEDBACK.getCode()).or() .eq("interview_status_init", CustomerInterviewEnum.PASS_FEEDBACK.getCode())) //优化sql,interviewer_json未null或key不存在指定数据时会报错--优化兼容不存在问题 //.last("and interviewer_json -> ''$.interviewerId'' like ''%" + id + "%''")); .last("CASE WHEN JSON_VALID(interviewer_json) THEN JSON_UNQUOTE(JSON_EXTRACT(interviewer_json, ''$.interviewerId'')) like ''%" + id + "%'' ELSE null END"));
MySQL IN子句中的多列
如何解决MySQL IN子句中的多列?
为了有效利用索引,您可以重写IN谓词
(x0, y0, x1, y1) IN ((4, 3, 5, 6),(9, 3, 2, 1))
像这样:
( ( x0 = 4 AND y0 = 3 AND x1 = 5 AND y1 = 6 )
OR ( x0 = 9 AND y0 = 3 AND x1 = 2 AND y1 = 1 )
)
解决方法
我有一个数据库,其中有四列对应于开始和结束位置的地理坐标x,y。这些列是:
- 00
- 00
- x1
- 11
我有这四个列的索引,其顺序为x0,y0,x1,y1。
我列出了大约一百种地理对组合。我将如何有效地查询此数据?
我想按照此SO答案的建议执行类似的操作,但它仅适用于Oracle数据库,不适用于MySQL:
SELECT * FROM my_table WHERE (x0,y0,x1,y1) IN ((4,3,5,6),...,(9,2,1));
我以为可能对索引做些什么?最好的方法是什么(即:最快的查询)?谢谢你的帮助!
笔记:
- 我无法更改数据库的架构
- 我有大约100‘000‘000行
编辑: 原样的代码实际上正在工作,但是它非常慢并且没有利用索引(因为我们有MySQL的旧版本v5.6.27
)。
今天关于IN子句中不存在列,但SQL运行和sql 不在in里面怎么写的分享就到这里,希望大家有所收获,若想了解更多关于JOIN ON子句中的T-SQL Case语句、join子句中表达式之一的类型在Entity Framework中不正确、josn字段中不存在数据或者不存在某个key进行sql查询时报错问题解决、MySQL IN子句中的多列等相关知识,可以在本站进行查询。
本文标签: