需要从mysql获取行

jc3wubiy  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(265)

我在mysql数据库的一列中有如下记录:

ID                           Tax
1                      GST + PST + ABC 
2                      PST + GST + ABC
3                            XYZ
4                      PST + ABC + GST

它们以varchar形式存储在db中。通过我的代码,我需要从数据库中获取符合条件的记录,如tax=“gst+pst+”
由于查询,目前我只获得第一条记录:

Select * from table where taxes = "GST + PST + ABC";

但我想从数据库中获取所有记录,其中上述3个名称(gst、pst、)将出现,而不考虑它们的位置。
所以,如果我申请上述条件,我需要记录:

GST + PST + ABC 
PST + GST + ABC
PST + ABC + GST

我正在使用mysql数据库,请让我知道有任何功能,我可以通过我的条件实现上述结果

prdp8dxp

prdp8dxp1#

我建议这样做:

where taxes like '%GST%' and
      taxes like '%PST%' and
      taxes like '%ABC%' and
      length(taxes) = 15;

如果你想要这三个代码,这个测试长度。您还可以测试 + :

where taxes like '%+%+%' and taxes not like '%+%+%+%'

或者如果你想要那些代码而不是其他的,那么就把那些条件排除在外。
这假设名称不重叠(因此没有称为“gs”或“st”的税)。如果可能的话:

where concat(' ', taxes, ' ') like '% GST %' and
      concat(' ', taxes, ' ') like '% PST %' and
      concat(' ', taxes, ' ') like '% ABC %';
mklgxw1f

mklgxw1f2#

我会用

WHERE NAME REGEXP "GST"
    AND NAME REGEXP "PST"
    AND NAME REGEXP "ABC"

话虽如此,这听起来像是数据模型不够规范化的情况。也就是说,您应该将每个税类型存储在一个单独的行中,这将使mysql操作更加容易(就像在本例中一样)。以现有的形式存储数据不是一个好的做法。我会尝试这样存储它:

ID  ID-sub  TAX
--  ------  ---
1   1       GST
1   2       PST
1   3       ABC
2   1       PST
2   2       GST

可能根本不需要id sub。

vlju58qv

vlju58qv3#

你可以用 OR ```
SELECT * FROM TABLE WHERE TAXES = "GST + PST + ABC"
OR TAXES = "GST + ABC + PST"
OR TAXES = "PST + GST + ABC"
OR TAXES = "PST + ABC + GST"
OR TAXES = "ABC + GST + PST"
OR TAXES = "ABC + PST + ABC"

这是一个非常小的列表,所以我不认为有理由在动态生成复杂的sql时变得棘手。
如果数据可以是其他格式,并且您希望匹配如下: `"GST + ABC + PST + ZZZ"` 然后我们可以利用 `LIKE` 以及 `%` 

相关问题