第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在單個(gè)準(zhǔn)備好的語句中執(zhí)行 > 1 個(gè) SQL 語句

在單個(gè)準(zhǔn)備好的語句中執(zhí)行 > 1 個(gè) SQL 語句

PHP
慕哥9229398 2023-08-19 17:41:34
好吧,我會(huì)嘗試盡可能簡單地解釋它;考慮我有兩個(gè)數(shù)據(jù)庫表(MySQL Server / MariaDB,使用準(zhǔn)備好的語句在 PHP 中以過程風(fēng)格編碼的數(shù)據(jù)庫相關(guān)任務(wù)):其中,我有一列數(shù)據(jù)類型 JSON,其內(nèi)容對應(yīng)于諸如{name1:info,name2:info}在另一個(gè)記錄中,我有簡單的非 json 記錄,其結(jié)構(gòu)如下:name  | status------+--------name1 | statusX------+--------name2 | statusY我的目標(biāo):我需要從表 1 中檢索 name2,但我還需要檢索具有相同名稱的人的狀態(tài)(在本例中為 statusY)。請注意,對于 name2 的檢索,我不能依賴 json 對象的索引(name2 可能是 json 對象的第一個(gè)鍵)。到目前為止我會(huì)如何做:A)在第一個(gè)查詢中從表1)獲取name2,對其進(jìn)行清理,B)在第二個(gè)查詢中使用它,然后正確檢索statusY語句 A) 和 B) 都是參數(shù)化的準(zhǔn)備好的 SQL 語句,由 AJAX 調(diào)用定期觸發(fā)(AJAX 輪詢)。鑒于這些數(shù)據(jù)庫查詢被頻繁執(zhí)行,我希望它們盡可能快地執(zhí)行,從而理想地將上面的兩個(gè)查詢減少為單個(gè)查詢。我的問題:我需要語句 A) 的結(jié)果來執(zhí)行語句 B),因此我無法將兩個(gè)查詢匯總為單個(gè)準(zhǔn)備好的語句,因?yàn)闇?zhǔn)備好的語句不能包含多個(gè) sql 語句。達(dá)到我想要的效果的最佳解決方案是創(chuàng)建一個(gè)存儲(chǔ)過程,例如:SET @name = SELECT ..... FROM table_1; SELECT .... FROM table_2;然后將其作為參數(shù)化準(zhǔn)備語句執(zhí)行;那是對的嗎?我對 MySQL Server 中的存儲(chǔ)過程完全沒有經(jīng)驗(yàn),實(shí)際上還不需要它們,但如果您想將 > 1 個(gè) sql 語句包裝到單個(gè)準(zhǔn)備好的語句中,它們似乎是唯一的解決方案。這個(gè)假設(shè)以及我必須創(chuàng)建一個(gè)存儲(chǔ)過程才能達(dá)到我想要的結(jié)果的結(jié)論是否正確?重要提示:我不知道我需要查詢的名稱。從表1)的json列的兩個(gè)名稱中,我只知道另一個(gè)名稱。換句話說,我有一個(gè)人X的名字,我想獲取表1)中與該人X關(guān)聯(lián)的所有人的狀態(tài),而每個(gè)人的狀態(tài)在表2)中列出,以避免數(shù)據(jù)庫中存在重復(fù)的狀態(tài)存儲(chǔ)。ATM,我通過使用條件語句從 DB 1) 檢索每個(gè)關(guān)系記錄的其他名稱,例如更新請參閱下面添加的答案,讓它正常工作。
查看完整描述

2 回答

?
慕尼黑5688855

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊

您可以使用 MySQL 查詢 JSON 數(shù)據(jù)類型(如果版本 > 5.7),因此您可以通過單個(gè)查詢輕松完成所有操作


嘗試一下


SELECT t1.name1, t1.name2, t2.status

FROM

(

  SELECT  JSON_EXTRACT(your_json_column, "$.name1") AS name1,

        JSON_EXTRACT(your_json_column, "$.name2") AS name2

  FROM table1

  WHERE JSON_EXTRACT(your_json_column, "$.name1") = 'info'

) t1

INNER JOIN table2 t2 ON t2.`name`=t1.name2

調(diào)整名稱your_json_column。另外,我假設(shè)您想要搜索name2特定的name1,因此我的WHERE子句,如果它是錯(cuò)誤的假設(shè),請將其刪除。


查看完整回答
反對 回復(fù) 2023-08-19
?
縹緲止盈

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊

好的,它可以工作了,非常感謝 Thomas G 提出的解決方案和 JNevill 的一些提示(干杯?。?/p>


SELECT t1.info1, t1.info2, t1.info3, t1.other_name, t2.status FROM (

    SELECT

    field1 AS info1,

    field2 AS info2,

    field3 AS info3,

    CASE

    WHEN JSON_VALUE(JSON_KEYS(json_names_column),"$[0]") = 'name1'

    THEN JSON_VALUE(JSON_KEYS(json_names_column),"$[1]")

    ELSE JSON_VALUE(JSON_KEYS(json_names_column),"$[0]")

    END

    AS other_name

    FROM table1

    WHERE id = 345

) t1 INNER JOIN table2 t2 ON t1.other_name = t2.name;

請注意,我使用 JSON_VALUE(JSON_KEYS()) 而不是 JSON_EXTRACT,只返回所需的名稱作為 t1 的名稱數(shù)據(jù),并且因?yàn)槲也恢涝诓樵冎皺z索的名稱,所以我無法使用 Thomas 提出的WHERE子句G。


查看完整回答
反對 回復(fù) 2023-08-19
  • 2 回答
  • 0 關(guān)注
  • 132 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)