当前位置: 首页 > 面试题库 >

选择一个MySQL过程?

司马腾
2023-03-14
问题内容

我有一个像这样的程序:

mysql> call Ticket_FiscalTotals(100307);
+---------+--------+----------+------------+------------+
| Service | Items  | SalesTax | eTaxAmount | GrandTotal |
+---------+--------+----------+------------+------------+
| 75.00   | 325.00 | 25.19    | 8.00       | 433.19     |
+---------+--------+----------+------------+------------+
1 row in set (0.08 sec)

我想从一个选择内调用此过程,如下所示:

SELECT     Ticket.TicketID as `Ticket`, 
Ticket.DtCheckOut as `Checkout Date / Time`,
CONCAT(Customer.FirstName, ' ', Customer.LastName) as `Full Name`, 
Customer.PrimaryPhone as `Phone`,

(CALL Ticket_FiscalTotals(Ticket.TicketID)).Service as `Service`

FROM Ticket
INNER JOIN Customer ON Ticket.CustomerID = Customer.CustomerID 
ORDER BY Ticket.SiteHomeLocation, Ticket.TicketID

但是我知道这是很痛苦的错误。有人可以指出我正确的方向吗?我将需要访问过程的所有列,以便在最终“选择”中(加入?)。该过程中的SQL代码很痛苦,因此首先要这样做!


问题答案:

Ticket_FiscalTotals过程返回一个包含一些字段的数据集,但是您只需要其中一个- Service。将您的过程重写为存储的函数-
Get_Ticket_FiscalTotals_Service

另一种方法是在过程中创建并填充临时表,然后将此临时表添加到查询中,例如:

DELIMITER $$

CREATE PROCEDURE Ticket_FiscalTotals()
BEGIN
  DROP TEMPORARY TABLE IF EXISTS temp1;
  CREATE TEMPORARY TABLE temp1(
    Service FLOAT(10.2),
    Items FLOAT(10.2),
    SalesTax FLOAT(10.2),
    eTaxAmount FLOAT(10.2),
    GrandTotal FLOAT(10.2)
  );
  INSERT INTO temp1 VALUES (75.0, 325.0, 25.19, 8.0, 433.19);
END
$$

DELIMITER ;

-- Usage
CALL Ticket_FiscalTotals();
SELECT t.*, tmp.service FROM Ticket t, temp1 tmp;


 类似资料:
  • 问题内容: 我想知道如何从MySQL表中选择一个值。该表包括列和其他列(是自动递增的,并且是唯一的)。给定用户名,我想将一个会话变量设置为等于给定用户名的列中的值。这是我已经尝试过的代码: 到目前为止,我得到: 可捕获的致命错误:无法将类stdClass的对象转换为字符串。 强制转换为字符串类型不能解决问题。 问题答案: 不要在查询中的字段名称或表名称中使用引号。 提取对象后,您需要通过属性/属性

  • 问题内容: 这里完全没有想法,可能需要一个简单的解决方案。 基本上我想要的查询是: 我只想选择ID为3和4的行,或者命名为“ andy”和“ paul” 非常感谢您的回答 问题答案: 尝试: 或等效的:

  • 我的数据库中有两个表。一个表包含有关用户的信息,而另一个表包含有关预订的数据。当用户进行预订时,userid将被放置在预订表中。现在,我想展示一张用户的照片,其中包括预订的备注和日期,但是照片在users表中。 这是我的两张桌子: null null

  • 问题内容: 我有一个具有以下字段的MySQL表: 其中父字段表示上层ID。例如,水果id是1,橙色是水果之一,因此父对象是1。 但是我想做一个有效的MySQL查询来获取所有记录,格式为parent-> children-> parent-> children格式。我怎样才能做到这一点? 查询的结果记录应类似于: 问题答案: 您需要mysql不支持的递归联接。您唯一可以做的就是确定最大深度(由于p-

  • 我有以下查询,我想从表中选择比所选视频的当前时间不超过6个月的所有视频 我从中得到了这个值:

  • 问题内容: 如何使用JOIN从一个表中选择所有列,从另一个表中仅选择一些列?在MySQL中。 问题答案: 只需使用表名: 这将选择所有列和列和从。