[英]Could someone help me understand why this MySQL update code isn't working php 5
[英]Could someone help me understand and convert this MySql statement into Postgresql?
因此,我正在處理的代碼使該語句由PHP執行(注意:這取自PostgreSQL日志文件,因此它不包含任何PHP內容):
CREATE temporary table IF NOT EXIST temp tablename(id int primary key,
shared int default 0) replace select 1, userid as id
from tablefoo where sharedid = 1337
我不太清楚這里到底發生了什么,我知道什么是臨時表,而且我可以很准確地估計出如果NOT EXIST會做什么,但是替換在這里做什么呢? 我知道replace就像insert一樣,但是它也可以替換東西,但是在這種情況下,沒有為它指定要替換的東西,所以它只是替換為空什么,為什么Select 1,我知道幾乎可以告訴您是否您的表有行或其他東西,但是在這里使用它有什么意義呢?
經過研究,我發現PostgreSQL中不存在IF NOT EXIST和replace。 大多數在線資源都建議使用SQL函數代替它們。
是否應該使用SQL函數來模擬IF NOT EXIST? 如果是這樣,我該寫些什么(對不起,我對SQL還很陌生)還是應該只使用PHP函數。 那替換呢?
很抱歉給您帶來麻煩,感謝您的時間,哦,如果你們不忙或沒事,您也可以告訴我如何模仿“忽略”,我目前的解決方案是任意刪除它。
在MySQL中,臨時表的許多用途都可以在PostgreSQL中用普通表表達式或普通子選擇替換。
WITH someCTE AS (
SELECT
...
) SELECT/UPDATE/DELETE ... WHERE sometable.column = someCTE.another_column;
查看CREATE TABLE
文檔 。 臨時表正如名稱所暗示的那樣不是永久的:
如果指定,該表將創建為臨時表。 臨時表在會話結束時或在當前事務結束時自動刪除 (請參見下面的“提交時”)。 臨時表存在時,具有相同名稱的現有永久表在當前會話中不可見,除非使用架構限定名稱引用它們。 在臨時表上創建的所有索引也會自動成為臨時索引。
特別是臨時表以不同的(非公共)模式存儲,例如:
=> Create Temporary Table someTempTable (value integer);
CREATE TABLE
=> \dt someTempTable
List of relations
Schema | Name | Type | Owner
-----------+---------------+-------+----------
pg_temp_2 | sometemptable | table | postgres
(1 row)
PostgreSQL沒有像MySQL的CREATE TABLE
那樣的IF NOT EXISTS
,因此您不能使用它。 如果要創建某個表,則需要首先刪除現有的表(如果存在)。 幸運的是,您可以使用SQL命令DROP TABLE IF EXISTS
來處理此問題:
=> Drop Table If Exists someTempTable;
DROP TABLE
=> Drop Table If Exists someTempTable;
NOTICE: table "sometemptable" does not exist, skipping
DROP TABLE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.