Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 需要访问由条件定义的表的字段_Mysql - Fatal编程技术网

Mysql 需要访问由条件定义的表的字段

Mysql 需要访问由条件定义的表的字段,mysql,Mysql,我需要访问由查询中的条件定义的数据库表的字段。我需要访问SERVICE_LEG列并从该列筛选数据 SELECT pa1.countryname, pw.serviceprovideractorwid, pa2.id, pw.orderid, pw.issorderref, po.modelcode, pw.itemid, pe1.eventcode AS STARTEVENTCODE, pe2.eventcode AS ENDEVENTCODE, CASE WHEN pw.endda

我需要访问由查询中的条件定义的数据库表的字段。我需要访问SERVICE_LEG列并从该列筛选数据

SELECT 
pa1.countryname,
pw.serviceprovideractorwid,
pa2.id,
pw.orderid,
pw.issorderref,
po.modelcode,
pw.itemid,
pe1.eventcode AS STARTEVENTCODE,
pe2.eventcode AS ENDEVENTCODE,
  CASE 
  WHEN pw.enddate < pof.retdate THEN 'TO_SERVICE'
  ELSE 'FROM SERVICE'
  END AS "SERVICE_LEG",
pa1.roleid,
pad.activitycode,
pw.tat,
pw.totelapse
FROM phwactivitydetail pw
JOIN phdactor pa1 ON pa1.actorwid = pw.orderissactorwid
JOIN phdactor pa2 ON pa2.actorwid = pw.serviceprovideractorwid
JOIN phdobject po ON po.objectwid = pw.objectwid
JOIN phdevent pe1 ON pe1.eventwid = pw.starteventwid
JOIN phdevent pe2 ON pe2.eventwid = pw.endeventwid
JOIN phaorderflowcatch pof ON pof.orderdid = pw.orderdid
JOIN phxactivitydef pad ON pad.activitydefdid = pw.activitydefdid
JOIN gldcalendar gc ON gc.datenum = pw.enddatenum;
谢谢。

使用外部子查询来实现这一点

演示: 使用外部子查询来实现这一点

演示:
“TO_服务”和“FROM服务”的列名应该用倒勾“and not”括起来,因为这会使其变为变量

SELECT 
pa1.countryname,
pw.serviceprovideractorwid,
pa2.id,
pw.orderid,
pw.issorderref,
po.modelcode,
pw.itemid,
pe1.eventcode AS STARTEVENTCODE,
pe2.eventcode AS ENDEVENTCODE,
  CASE 
  WHEN pw.enddate < pof.retdate THEN `TO_SERVICE`
  ELSE `FROM SERVICE`
  END AS "SERVICE_LEG",
pa1.roleid,
pad.activitycode,
pw.tat,
pw.totelapse
FROM phwactivitydetail pw
JOIN phdactor pa1 ON pa1.actorwid = pw.orderissactorwid
JOIN phdactor pa2 ON pa2.actorwid = pw.serviceprovideractorwid
JOIN phdobject po ON po.objectwid = pw.objectwid
JOIN phdevent pe1 ON pe1.eventwid = pw.starteventwid
JOIN phdevent pe2 ON pe2.eventwid = pw.endeventwid
JOIN phaorderflowcatch pof ON pof.orderdid = pw.orderdid
JOIN phxactivitydef pad ON pad.activitydefdid = pw.activitydefdid
JOIN gldcalendar gc ON gc.datenum = pw.enddatenum;
此外,您还可以根据以下内容添加条件-

SELECT * FROM 
(
    SELECT 
    pa1.countryname,
    pw.serviceprovideractorwid,
    pa2.id,
    pw.orderid,
    pw.issorderref,
    po.modelcode,
    pw.itemid,
    pe1.eventcode AS STARTEVENTCODE,
    pe2.eventcode AS ENDEVENTCODE,
      CASE 
      WHEN pw.enddate < pof.retdate THEN `TO_SERVICE`
      ELSE `FROM SERVICE`
      END AS "SERVICE_LEG",
    pa1.roleid,
    pad.activitycode,
    pw.tat,
    pw.totelapse
    FROM phwactivitydetail pw
    JOIN phdactor pa1 ON pa1.actorwid = pw.orderissactorwid
    JOIN phdactor pa2 ON pa2.actorwid = pw.serviceprovideractorwid
    JOIN phdobject po ON po.objectwid = pw.objectwid
    JOIN phdevent pe1 ON pe1.eventwid = pw.starteventwid
    JOIN phdevent pe2 ON pe2.eventwid = pw.endeventwid
    JOIN phaorderflowcatch pof ON pof.orderdid = pw.orderdid
    JOIN phxactivitydef pad ON pad.activitydefdid = pw.activitydefdid
    JOIN gldcalendar gc ON gc.datenum = pw.enddatenum
) a
where a.SERVICE_LEG="put_condition_here"
;

“TO_服务”和“FROM服务”的列名应该用倒勾“and not”括起来,因为这会使其变为变量

SELECT 
pa1.countryname,
pw.serviceprovideractorwid,
pa2.id,
pw.orderid,
pw.issorderref,
po.modelcode,
pw.itemid,
pe1.eventcode AS STARTEVENTCODE,
pe2.eventcode AS ENDEVENTCODE,
  CASE 
  WHEN pw.enddate < pof.retdate THEN `TO_SERVICE`
  ELSE `FROM SERVICE`
  END AS "SERVICE_LEG",
pa1.roleid,
pad.activitycode,
pw.tat,
pw.totelapse
FROM phwactivitydetail pw
JOIN phdactor pa1 ON pa1.actorwid = pw.orderissactorwid
JOIN phdactor pa2 ON pa2.actorwid = pw.serviceprovideractorwid
JOIN phdobject po ON po.objectwid = pw.objectwid
JOIN phdevent pe1 ON pe1.eventwid = pw.starteventwid
JOIN phdevent pe2 ON pe2.eventwid = pw.endeventwid
JOIN phaorderflowcatch pof ON pof.orderdid = pw.orderdid
JOIN phxactivitydef pad ON pad.activitydefdid = pw.activitydefdid
JOIN gldcalendar gc ON gc.datenum = pw.enddatenum;
此外,您还可以根据以下内容添加条件-

SELECT * FROM 
(
    SELECT 
    pa1.countryname,
    pw.serviceprovideractorwid,
    pa2.id,
    pw.orderid,
    pw.issorderref,
    po.modelcode,
    pw.itemid,
    pe1.eventcode AS STARTEVENTCODE,
    pe2.eventcode AS ENDEVENTCODE,
      CASE 
      WHEN pw.enddate < pof.retdate THEN `TO_SERVICE`
      ELSE `FROM SERVICE`
      END AS "SERVICE_LEG",
    pa1.roleid,
    pad.activitycode,
    pw.tat,
    pw.totelapse
    FROM phwactivitydetail pw
    JOIN phdactor pa1 ON pa1.actorwid = pw.orderissactorwid
    JOIN phdactor pa2 ON pa2.actorwid = pw.serviceprovideractorwid
    JOIN phdobject po ON po.objectwid = pw.objectwid
    JOIN phdevent pe1 ON pe1.eventwid = pw.starteventwid
    JOIN phdevent pe2 ON pe2.eventwid = pw.endeventwid
    JOIN phaorderflowcatch pof ON pof.orderdid = pw.orderdid
    JOIN phxactivitydef pad ON pad.activitydefdid = pw.activitydefdid
    JOIN gldcalendar gc ON gc.datenum = pw.enddatenum
) a
where a.SERVICE_LEG="put_condition_here"
;

例如,可以使用公共表表达式

WITH CTE(countryname,serviceprovideractorwid,id ...., SERVICE_LEG,... )
AS
(
SELECT 
pa1.countryname,
pw.serviceprovideractorwid,
pa2.id,
...
  CASE 
  WHEN pw.enddate < pof.retdate THEN 'TO_SERVICE'
  ELSE 'FROM SERVICE'
  END AS "SERVICE_LEG",
...
FROM phwactivitydetail pw
JOIN phdactor pa1 ON pa1.actorwid = pw.orderissactorwid
JOIN phdactor pa2 ON pa2.actorwid = pw.serviceprovideractorwid
JOIN phdobject po ON po.objectwid = pw.objectwid
JOIN phdevent pe1 ON pe1.eventwid = pw.starteventwid
JOIN phdevent pe2 ON pe2.eventwid = pw.endeventwid
JOIN phaorderflowcatch pof ON pof.orderdid = pw.orderdid
JOIN phxactivitydef pad ON pad.activitydefdid = pw.activitydefdid
JOIN gldcalendar gc ON gc.datenum = pw.enddatenum  )
SELECT * 
FROM CTE
WHERE SERVICE_LEG = "your_condition"

例如,可以使用公共表表达式

WITH CTE(countryname,serviceprovideractorwid,id ...., SERVICE_LEG,... )
AS
(
SELECT 
pa1.countryname,
pw.serviceprovideractorwid,
pa2.id,
...
  CASE 
  WHEN pw.enddate < pof.retdate THEN 'TO_SERVICE'
  ELSE 'FROM SERVICE'
  END AS "SERVICE_LEG",
...
FROM phwactivitydetail pw
JOIN phdactor pa1 ON pa1.actorwid = pw.orderissactorwid
JOIN phdactor pa2 ON pa2.actorwid = pw.serviceprovideractorwid
JOIN phdobject po ON po.objectwid = pw.objectwid
JOIN phdevent pe1 ON pe1.eventwid = pw.starteventwid
JOIN phdevent pe2 ON pe2.eventwid = pw.endeventwid
JOIN phaorderflowcatch pof ON pof.orderdid = pw.orderdid
JOIN phxactivitydef pad ON pad.activitydefdid = pw.activitydefdid
JOIN gldcalendar gc ON gc.datenum = pw.enddatenum  )
SELECT * 
FROM CTE
WHERE SERVICE_LEG = "your_condition"

好的,它可以这样访问。如果我需要访问此表中WHERE子句上的服务。不是在桌子外面。在最后一个join语句之后…好的,它可以像这样访问。如果我需要访问此表中WHERE子句上的服务。不是在桌子外面。在最后一个join语句之后。。。