gpt4 book ai didi

mysql - 将两个表中的列合并为一个结果,然后在 SELECT 查询中使用

转载 作者:行者123 更新时间:2023-11-29 21:47:57 28 4
gpt4 key购买 nike

我有一个来自两个不同表(产品供应商代码 - 内部连接)的 SELECT 查询,其中指定列是我的搜索字符串 %LIKE%。

SELECT product.*, supplier_code.PART_NO AS PART_NO
FROM product INNER JOIN supplier_code ON
product.PRODUCT_ID=supplier_code.PRODUCT_ID
AND supplier_code.MAINSUPP = 1
WHERE $column LIKE ?
LIMIT 0, 25

我遇到的问题是其中一列(条形码)具有存储在第三表中的替代项 - AltBCode。因此,如果 $column = Barcode,则该匹配可能位于 Product.Barcode 中,也可能位于 AltBCode.Alt_Barcode 中(两者不能同时存在,并且两者都是唯一的)。

我只能假设我需要首先将这两列组合在一起,作为一个 AllBarcodes 列,然后在我的 Select 查询中使用它?

两个条码存储表的布局为:

Product Table
PRODUCT_ID | Barcode | Description | Price | Stock | Etc
1 | 12345 | Apple | 1.00 | 4 |
2 | 45678 | Orange | 0.50 | 2 |
3 | 91583 | Banana | 2.00 | 0 |

AltBCode Table
Id | PRODUCT_ID | Alt_Barcode
1 | 2 | 4321

因此,如果我搜索“4321”,我想从产品返回第 2 行。

更新

谢谢各位的回复。但我不确定我说得足够清楚。

一旦 Product.BarcodeAltBCODE.Alt_code 连接起来,它们就是我希望能够在 WHERE 子句中使用的 $column。所以:

SELECT product.*, supplier_code.PART_NO AS PART_NO
(Magically Select product.barcode and altbcode.altcode AS ALLBARCODES)
FROM product INNER JOIN supplier_code ON
product.PRODUCT_ID=supplier_code.PRODUCT_ID
AND supplier_code.MAINSUPP = 1
WHERE ALLBARCODES LIKE %4321%
LIMIT 0, 25

所以为了简化如果:

Table Product
PROD_ID | Barcode | Desc
2 | 1234 | Apples

Table Alt Barcodes'
ID | PROD_ID | ALT_CODE
1 | 2 | 2345'
2 | 2 | 3456
3 | 2 | 4567

WHERE PROD_ID = 2 会给我 4 行:

PROD_ID -> 2, ALLBARCODE ->1234, DESC- > APPLES  
PROD_ID -> 2, ALLBARCODE ->2345, DESC- > APPLES
PROD_ID -> 2, ALLBARCODE ->3456, DESC- > APPLES
PROD_ID -> 2, ALLBARCODE ->4567, DESC- > APPLES

但是 WHERE ALLBARCODE LIKE %2345% 只会匹配 1

最佳答案

第一个左连接 产品表AltBCode表,以便您将两个代码放在同一个表上。

SELECT PT.*, AT.Alt_Barcode
FROM `Product Table` PT
LEFT JOIN `AltBCode Table` AT
ON PT.PRODUCT_ID = AT.PRODUCT_ID

您的最终查询应该是

我使用=而不是LIKE

SELECT *,
$column as MatchBarcode
FROM supplier S
JOIN `Product Table` PT
ON S.PRODUCT_ID = PT.PRODUCT_ID
LEFT JOIN `AltBCode Table` AT
ON PT.PRODUCT_ID = AT.PRODUCT_ID
WHERE S.MAINSUPP = 1
AND (
$column = AT.`Alt_Barcode`
OR $column = PT.`Barcode`
)

首先我尝试使用

CASE 
WHEN $column = AT.`Alt_Barcode` THEN AT.`Alt_Barcode`
WHEN $column = PT.`Barcode` THEN PT.`Barcode`
END as MatchBarcode

但这相当于$column as MatchBarcode

关于mysql - 将两个表中的列合并为一个结果,然后在 SELECT 查询中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33943347/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com