CREATE VIEW orders AS
SELECT '1'::int AS source -- or any other tag to identify source
,"OrderNumber"::text AS order_nr
,"InvoiceNumber" AS tansaction_id -- no cast .. is int already
,"OrderDate" AT TIME ZONE 'UTC' AS purchase_date -- !! see explanation
FROM tbl_newegg
UNION ALL -- not UNION!
SELECT 2
"amazonOrderId"
,"merchant-order-id"
,"purchase-date"
FROM tbl_amazon;
SELECT * FROM orders WHERE order_nr = 123 AND source = 2;
source
如果order_nr
不是唯一的,则是必需的。您还如何保证不同来源的唯一订单号?
timestamp without time zone
在全球范围内,A 是模棱两可的。它仅与时区有关。如果您将timestamp
和混合使用timestamptz
,则需要将其timestamp
与AT TIME ZONE
结构放置在特定的时区以使其正常工作。有关更多说明,请阅读此相关答案。
我使用UTC作为时区,您可能需要提供其他时间。一个简单的转换"OrderDate"::timestamptz
将假定您当前的时区。AT TIME ZONE
应用于中的timestamp
结果timestamptz
。这就是为什么我没有添加其他演员表的原因。
虽然你 可以 ,我建议不要在Postgresql中使用驼峰标识符 以往 。避免了多种可能的混乱。请注意我提供的小写字母标识符(现在没有多余的双引号)。
请勿将varchar(25)
用作类型order_nr
。只要使用text
无任意长度调节剂,如果它必须是一个字符串。如果所有订单号仅由数字组成,integer
或者bigint
会更快。