Neo4j知識庫:Cypher查詢語句中為什么WHERE條件沒起作用

原文鏈接:https://neo4j.com/developer/kb/why-where-clause-does-not-filter/

在Cypher語句中,當你發(fā)現(xiàn)WHERE沒有起作用時固蚤,可以嘗試下面的幾種方法找到問題所在债鸡。

檢測WHERE條件是否跟在了OPTIONAL MATCH之后

WHERE語句是不能獨立使用的福荸,它必須配合MATCH需了、WITH或者 OPTIONAL MATCH一起使用。
當“WITH...WHERE"或”MATCH...WHERE"這種查詢語句出現(xiàn)時对嚼,WHERE條件會作用到所有結果集上。通常情況我們期望的是绳慎,剔除那些WHERE條件為False的數(shù)據(jù)纵竖。
然而“OPTIONAL MATCH ... WHERE”的情況略有不同,這個查詢并不會剔除數(shù)據(jù)杏愤。當使用OPTIONAL MATCH時靡砌,當匹配不到數(shù)據(jù)或WHERE條件為False時,這個新引入的變量只會被賦值為null珊楼。原來的數(shù)據(jù)并不會剔除通殃,已存在的變量也不會發(fā)生變化,給人的感覺就是WHERE條件沒有起作用厕宗,而事實上呢画舌,是WHERE被應用到了錯誤的地方。

MATCH (m:Movie)
OPTIONAL MATCH (m)<-[:WORKED_ON]-(a:Animator)
WHERE m.releaseYear > 1999 AND a IS NOT NULL
RETURN m, collect(a) as animators

上面的示例請求已慢,看上去好像是想要查詢1999年后發(fā)行的電影和參與這些電影的動畫制作人曲聂,但是這個查詢是錯誤的。WHERE條件僅僅對OPTIONAL MATCH有作用佑惠,所以朋腋,所有電影都會被查詢出來,沒有一個會被過濾掉兢仰。但是動畫制作人數(shù)據(jù)則返回了參與1999年以后發(fā)行的電影的動畫制作人乍丈。
如果要修復這個查詢語句,只需要將WHERE條件放到合適的位置把将,將它放到MATCH或WITH后面即可篩選出想要的數(shù)據(jù)了轻专。

MATCH (m:Movie)
OPTIONAL MATCH (m)<-[:WORKED_ON]-(a:Animator)
WITH m, a
WHERE m.releaseYear > 1999 AND a IS NOT NULL
RETURN m, collect(a) as animators

檢查WHER條件的拼寫錯誤或大小寫

拼寫錯誤很容易造成WHERE條件子句失效,特別是大小寫問題察蹲。
結點的標簽请垛、關系類型、變量洽议、屬性的鍵和值都是大小寫敏感的宗收,所以一定要確保你寫的是正確的。

MATCH (m:Movie)
WHERE NOT (m)<-[:worked_on]-(a:animator) AND m.ReleaseYear > 1999
RETURN m

上面這個查詢語句看上去沒有任何拼寫錯誤亚兄,但事實上混稽,他在關系類型、結點續(xù)簽以及屬性鍵上大小寫都錯了,所以匈勋,這個查詢的WHERE條件是不起作用礼旅。

檢測屬性的變量類型

在使用int或float類型的比較失敗時,你可以先確認一下屬性的值是不是int或float類型洽洁。
確認方法也很簡單:在neo4j瀏覽器的文本結果視圖模式下痘系,字符串的值是有引號的,而int或float類型的值是沒有饿自。 在導入數(shù)據(jù)時要特別小心汰翠,尤其是CSV文件導入,它會把所有值都轉成字符串昭雌。所以复唤,為了避免這個問題,你需要使用toInteger()或toFloat()把字符串轉成int或float類型烛卧。

屬性的鍵或值的首尾空格

屬性的首尾空格有時會造成WHERE條件無效苟穆,這一般是由于圖中的數(shù)據(jù)問題而不是查詢的問題。

MATCH (m:Movie)<-[:ACTED_IN]-(p:Person)
WHERE p.name = 'Keanu Reeves'
RETURN m

上面的查詢語句看上去沒啥問題唱星,但事實上,結點的name屬性是“Keanu Reeves ”跟磨,在結尾有一個空格间聊,所以,這個查詢語句是查不到這個結點的抵拘。

通常情況哎榴,只能仔細檢測結點和關系上的字符串值,看是否有空格僵蛛。如果使用Neo4j瀏覽器尚蝌,文本結果視圖可以很容易發(fā)現(xiàn)空格。另外充尉,查詢時使用 STARTS WITH, ENDS WITH, 或 CONTAINS 這幾個函數(shù)也可以幫助你判斷屬性值是否有空格飘言。

屬性的值里存在空格的情況較少,如果有驼侠,一般都是因為從錯誤格式的文件中導入造成的姿鸿。

例如,嘗試導入一下CSV文件的標題行:?

nickName, firstName,lastName 

在firstName的開頭一個空格倒源,在lastName的結尾有一個空格苛预。導入時,屬性鍵就會包含首部空格和尾部空格笋熬,因此實際的屬性鍵就變成了“nickName”热某、” firstName”和“l(fā)astName “,如果沒有檢查出來,那么查詢時就會出問題了昔馋。


?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末筹吐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绒极,更是在濱河造成了極大的恐慌骏令,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垄提,死亡現(xiàn)場離奇詭異榔袋,居然都是意外死亡,警方通過查閱死者的電腦和手機铡俐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門凰兑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人审丘,你說我怎么就攤上這事吏够。” “怎么了滩报?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵锅知,是天一觀的道長。 經常有香客問我脓钾,道長售睹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任可训,我火速辦了婚禮昌妹,結果婚禮上,老公的妹妹穿的比我還像新娘握截。我一直安慰自己飞崖,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布谨胞。 她就那樣靜靜地躺著固歪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畜眨。 梳的紋絲不亂的頭發(fā)上昼牛,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音康聂,去河邊找鬼贰健。 笑死,一個胖子當著我的面吹牛恬汁,可吹牛的內容都是我干的伶椿。 我是一名探鬼主播辜伟,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼脊另!你這毒婦竟也來了导狡?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤偎痛,失蹤者是張志新(化名)和其女友劉穎旱捧,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踩麦,經...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡枚赡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了谓谦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贫橙。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖反粥,靈堂內的尸體忽然破棺而出卢肃,到底是詐尸還是另有隱情,我是刑警寧澤才顿,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布莫湘,位于F島的核電站,受9級特大地震影響郑气,放射性物質發(fā)生泄漏逊脯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一竣贪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧巩螃,春花似錦演怎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拍皮,卻和暖如春歹叮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铆帽。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工咆耿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爹橱。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓萨螺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子慰技,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容

  • 1. 簡介 1.1 什么是 MyBatis 椭盏? MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,520評論 0 4
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔吻商,今天18年5月份再次想寫文章掏颊,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,756評論 2 9
  • 概要 64學時 3.5學分 章節(jié)安排 電子商務網站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,197評論 0 3
  • 會說話的眼睛,真的很迷人艾帐。 2017儼然要在匆匆忙忙的日子里過去了乌叶,元旦聯(lián)歡的準備工作都已經悄然展開。孩子們個個忙...
    時慧慧愛物閱讀 407評論 0 1
  • 文|金不換先生 跟老友蔡Sir小聚掩蛤,席間他有個故人阿Sam剛從國外回來枉昏,三個人大男人抽著煙,有一搭沒一搭的聊起了家...
    叁柒物語閱讀 761評論 15 12