我有一张包含此声明的表格:
CREATE TABLE foobar (
id int(11) NOT NULL AUTO_INCREMENT,
dow set('q','w','e','r','t','y', 'u') NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT;
使用这些值:
id, dow
'1', '1,3,6'
'1', '2,4,7'
那些查询会返回不同的值。
SELECT dow, FIND_IN_SET('4', dow) FROM (SELECT * from pippo.pluto) as B;
SELECT dow, FIND_IN_SET('4', dow) FROM pippo.pluto as B;
第一个查询返回这些结果:
'1,3,6', '0'
'2,4,7', '2'
第二个查询返回结果:
'1,3,6', '0'
'2,4,7', '4'
为什么?
针对5.6和5.7 mysql版本进行了测试。
编辑:
如果我使用mysql视图,则此行为保持不变。
CREATE VIEW selectInner AS SELECT dow, FIND_IN_SET('r', dow) FROM (SELECT * from pippo.foobar) as B;
CREATE VIEW selectDirect AS SELECT dow, FIND_IN_SET('r', dow) FROM pippo.foobar as B;
答案 0 :(得分:0)
这里有两件事情在互动:
SET
的列,则FIND_IN_SET()
函数将被优化为使用位算术。”每FIND_IN_SET
docs 行为证明了这一点:
dow
引用该表的元数据中定义的列)时,FIND_IN_SET
将返回列定义中条目的索引/ LI>
dow
引用派生列)上运行时,FIND_IN_SET
将返回派生值 如果你搜索例如,这是很清楚的。包含y
的列中的u
和q,e,y,u
:在直接查询表格时会得到6和7,其中dow
是SET
,其中包含q,w,e,r,t,y,u
FIND_IN_SET
1}}和dow
使用按位优化;但在搜索派生表时为3和4,其中q,e,y,u
是包含该行 XElement element;
XDocument xdoc = XDocument.Load(FileLoc);
element = xdoc.Elements(XName.Get("gold", "http://schemas.datacontract.org/2004/07/DumaLegend")).Single();
element.Value = Gold.Text;
的字符串。